How can I set a variable while doing an Update statement? I can\'t seem to figure out the syntax.
So I want something like this below but it\'s saying the syntax is
The key is the ":=" operators. MySQL User Variable
You can also assign a value to a user variable in statements other than SET. In this case, the assignment operator must be := and not = because the latter is treated as the comparison operator = in non-SET statements:
1 Use the one of the updating column
SET @tempVariable := 0;
UPDATE myTable
SET col1 = 5,
col2 = @tempVariable := 100,
col3 = @tempVariable := col2 + 1;
@tempVariable is always 100 and col3 will be always 101. Seems mySQL will use the new assigned value instead of original value in the table. This is different from MS SQL. To make it more clear, try the following example, the value will be 1001 for col3 and @tempVariable.
UPDATE myTable
SET col1 = 5,
col2 = @tempVariable := 100,
col2 = 1000
col3 = @tempVariable := col2 + 1;
2 Use other column in the table than the updating column.
UPDATE myTable
SET col1 = 5,
col2 = @tempVariable := 100,
col3 = @tempVariable := col4 + 1;
@tempVariable and col3 will have the same value. They will be the col4 original value + 1.
I have used php or coldfusion to do something like this, (php example)
function something($param){
$localVarCleaned = mysql_real_escape_string($param);
mysql_query("
UPDATE tablename
SET col = ".$localVarCleaned."
");
}
I tested a similar query using a select and it worked for me, so I would rewrite your query as follows
SET @tempVariable := 0;
UPDATE myTable SET col1 = 5, col2 = (SELECT @tempVariable + 100);
Hope that helps.
If you want to obtain something like this:
SET @tempVariable := 0;
UPDATE myTable SET col1 = 5, col2 = @tempVariable, @tempVariable := 100;
You can do a trick like this:
ALTER TABLE Proj ADD col3 numeric;
SET @tempVariable := 0;
UPDATE myTable SET col1 = 5, col2 = @tempVariable, col3 = @tempVariable := 100;
ALTER TABLE Proj DROP col3;
In this way, you can assign values to a variable without change attributes of a table. It is really usefull when setting dinamic values.
FOR EXAMPLE: @tempVariable := @otherVariable + 100;
This is possible :-
UPDATE myTable SET col1 = 5,
col2 = (@tempVariable:=@tempVariable+1) // to increment
To set an integer (not increment)
UPDATE myTable SET col1 = 5,
col2 = (@tempVariable:=100) // to assign any integer