Могу ли я использовать DEFAULT для установки метки времени в команде UPDATE в MySQL? - PullRequest
0 голосов
/ 05 июня 2019

Мой хостинг-провайдер вчера обновил наш MySQL, и теперь значительная часть моего сайта не работает. После исследования я обнаружил, что любые команды UPDATE, которые указывают, что метка времени должна быть установлена ​​в DEFAULT, не могут обновить метку времени. Это веб-сайт, который прекрасно работает уже 2 года. Новая версия MySQL - 10.2.23-MariaDB-log-cll-lve.

Например, используя следующую таблицу и заполняя ее некоторыми данными:

CREATE TABLE `NewTable` ( `NewTableKEY` INT NOT NULL AUTO_INCREMENT , `NewTableTime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (`NewTableKEY`));

INSERT INTO `NewTable` (`NewTableKEY`, `NewTableTime`) VALUES (NULL, DEFAULT);

Я пытаюсь обновить метку времени, используя DEFAULT:

UPDATE NewTable SET NewTableTime=DEFAULT;

В phpMyAdmin я получаю ответ:

 0 rows affected. (Query took 0.0005 seconds.)

Я также попытался использовать NULL вместо значения по умолчанию:

UPDATE NewTable SET NewTableTime=NULL;

Использование NULL таким образом обновляет поле Timestamp до текущего времени. Я обнаружил, что использование DEFAULT в команде INSERT работает просто отлично. Я также обнаружил, что функция «при обновлении CURRENT_TIMESTAMP» работает, как и ожидалось.

Насколько я понял, использование DEFAULT в команде UPDATE было правильным синтаксисом (и он работал годами). Я использую неправильный синтаксис? Этот синтаксис устарел? Если да, то каков правильный синтаксис?

1 Ответ

0 голосов
/ 05 июня 2019

Измените определение таблицы на следующее

CREATE TABLE `NewTable` ( `NewTableKEY` INT NOT NULL AUTO_INCREMENT , 
      `NewTableTime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
      PRIMARY KEY (`NewTableKEY`));

Это автоматически обновит метку времени при выполнении запроса UPDATE.ПО УМОЛЧАНИЮ обслуживает только оператор вставки, но если вы укажете ON UPDATE, MySQL автоматически обновит значение поля (вам не нужно кодировать)

Подробнее см. [https://dev.mysql.com/doc/refman/8.0/en/timestamp-initialization.html],

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

Если вы хотите обновить в соответствии с вашими условиями, либо напишите свой собственный код, либо ИСПОЛЬЗУЙТЕ триггер, что-то похожее на приведенное ниже,

CREATE TRIGGER _triggerName AFTER UPDATE ON _tableName FOR EACH ROW 
BEGIN
    -- Your conditions 
    -- Your queries Based on the conditions 
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...