MySql Как установить локальную переменную в операторе обновления (синтаксис?) - PullRequest
20 голосов
/ 12 декабря 2011

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

Так что я хочу что-то вроде этого ниже, но он говорит, что синтаксис неправильный:

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

Ответы [ 5 ]

18 голосов
/ 12 декабря 2011

Это возможно: -

 UPDATE myTable SET col1 = 5,
 col2 = (@tempVariable:=@tempVariable+1) // to increment

Чтобы установить целое число (без приращения)

 UPDATE myTable SET col1 = 5, 
 col2 = (@tempVariable:=100) // to assign any integer
6 голосов
/ 19 октября 2012

Если вы хотите получить что-то вроде этого:

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;

  • Бросить кол3

ALTER TABLE Proj DROP col3;

Таким образом, вы можете присваивать значения переменной без изменения атрибутов таблицы. Это действительно полезно при установке динамических значений.

НА ПРИМЕРЕ: @tempVariable := @otherVariable + 100;

2 голосов
/ 12 сентября 2013

Ключом являются операторы ": =". MySQL User Variable

Вы также можете присвоить значение пользовательской переменной в инструкциях, отличных от SET.В этом случае оператор присваивания должен быть: =, а не =, потому что последний рассматривается как оператор сравнения = в операторах не-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.

0 голосов
/ 02 июня 2017

Я протестировал подобный запрос, используя select, и он сработал для меня, поэтому я переписал бы ваш запрос следующим образом

SET @tempVariable := 0;
UPDATE myTable SET col1 = 5, col2 = (SELECT @tempVariable + 100);

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

0 голосов
/ 12 декабря 2011

Я использовал php или coldfusion, чтобы сделать что-то вроде этого (пример php)

function something($param){

   $localVarCleaned = mysql_real_escape_string($param);

   mysql_query("
   UPDATE tablename
   SET col = ".$localVarCleaned."
   ");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...