MySql Как установить локальную переменную в инструкции обновления (синтаксис?)
Как установить переменную при выполнении инструкции Update? Я не могу понять синтаксис.
Итак, я хочу что-то вроде этого ниже, но он говорит, что синтаксис неверен:
SET @tempVariable := 0;
UPDATE myTable SET col1 = 5, col2 = @tempVariable, @tempVariable := 100;
Ответы
Ответ 1
Это возможно: -
UPDATE myTable SET col1 = 5,
col2 = (@tempVariable:[email protected]+1) // to increment
Чтобы установить целое число (не увеличивать)
UPDATE myTable SET col1 = 5,
col2 = (@tempVariable:=100) // to assign any integer
Ответ 2
Если вы хотите получить что-то вроде этого:
SET @tempVariable := 0;
UPDATE myTable SET col1 = 5, col2 = @tempVariable, @tempVariable := 100;
Вы можете сделать такой трюк:
- Создать значение столбца.
ALTER TABLE Proj ADD col3 numeric;
- Дайте значение col3, чтобы установить нужную вам переменную (@tempVariable).
SET @tempVariable := 0;
UPDATE myTable SET col1 = 5, col2 = @tempVariable, col3 = @tempVariable := 100;
ALTER TABLE Proj DROP col3;
Таким образом, вы можете присваивать значения переменной без атрибутов изменения таблицы. Это действительно полезно при настройке динамических значений.
ДЛЯ ПРИМЕРА: @tempVariable := @otherVariable + 100;
Ответ 3
Ключом являются операторы ": =". Пользовательская переменная MySQL
Вы также можете присвоить значение переменной пользователя в других выражениях чем SET. В этом случае оператор присваивания должен быть: = и not = потому что последний рассматривается как оператор сравнения = в не-SET заявления:
1 Используйте один из столбцов обновления
SET @tempVariable := 0;
UPDATE myTable
SET col1 = 5,
col2 = @tempVariable := 100,
col3 = @tempVariable := col2 + 1;
@tempVariable всегда 100, а col3 всегда будет 101. Кажется, mySQL будет использовать новое назначенное значение вместо исходного значения в таблице. Это отличается от MS SQL. Чтобы сделать его более понятным, попробуйте следующий пример: значение будет равно 1001 для col3 и @tempVariable.
UPDATE myTable
SET col1 = 5,
col2 = @tempVariable := 100,
col2 = 1000
col3 = @tempVariable := col2 + 1;
2 Используйте другой столбец в таблице, чем столбец обновления.
UPDATE myTable
SET col1 = 5,
col2 = @tempVariable := 100,
col3 = @tempVariable := col4 + 1;
@tempVariable и col3 будут иметь одинаковое значение. Они будут оригинальным значением col4 + 1.
Ответ 4
Я использовал php или coldfusion, чтобы сделать что-то вроде этого (пример php)
function something($param){
$localVarCleaned = mysql_real_escape_string($param);
mysql_query("
UPDATE tablename
SET col = ".$localVarCleaned."
");
}
Ответ 5
Я тестировал аналогичный запрос с помощью select, и он работал у меня, поэтому я бы переписал ваш запрос следующим образом
SET @tempVariable := 0;
UPDATE myTable SET col1 = 5, col2 = (SELECT @tempVariable + 100);
Надеюсь, что это поможет.