Подтвердить что ты не робот

MySql Как установить локальную переменную в инструкции обновления (синтаксис?)

Как установить переменную при выполнении инструкции Update? Я не могу понять синтаксис.

Итак, я хочу что-то вроде этого ниже, но он говорит, что синтаксис неверен:

SET @tempVariable := 0;
UPDATE myTable SET col1 = 5, col2 = @tempVariable, @tempVariable := 100;
4b9b3361

Ответ 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;

  • Отбросьте col3

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);

Надеюсь, что это поможет.