MySQL Обновление запроса не работает с оператором - PullRequest
0 голосов
/ 17 апреля 2020

Первый запрос:

update tableA set columnA = 'Hello' and updated_at = now() where id = 10;

Второй запрос:

update tableA set columnA = 'Hello', updated_at = now() where id = 10;

Когда я выполняю первый запрос, столбец A обновляется как 0, где второй запрос работал нормально и обновляется как Hello.

Почему первый запрос обновляет таблицу как значение 0.

Ответы [ 2 ]

3 голосов
/ 17 апреля 2020

Я думаю, что здесь используется слабый синтаксис MySQL. Попробуйте переписать ваше первое обновление следующим образом:

UPDATE tableA
SET columnA = ('Hello' AND updated_at = NOW())
WHERE id = 10;

То есть выражение RHS, присваиваемое columnA, на самом деле является AND строкового литерала и присваиванием. Проверьте демонстрацию ниже, чтобы убедиться, что эта RHS фактически оценивается как ноль.

Демо

Что касается почему это происходит, нам нужно поискать MySQL правила того, что происходит. Но лучше всего придерживаться второго запроса на обновление, который использует правильный синтаксис ANSI.

1 голос
/ 17 апреля 2020

@ TimBiegeleisen прав, есть только одно присваивающее выражение для вашего первого запроса.

MySQL синтаксис для SET assignment_list в UPDATE похож на

 assignment [, assignment] ...

каждое присваивающее выражение для столбец, разделенный запятой (,)

Итак, если у вас есть несколько назначений, используйте запятую (,), чтобы отделить назначение.

Вы нашли более подробную информацию о c здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...