Создать триггер mysql для обновления специального столбца после строки обновления - PullRequest
0 голосов
/ 31 декабря 2018

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

запрос триггера:

DELIMITER $$
CREATE TRIGGER after_user_update AFTER UPDATE ON group_chat_message
FOR EACH ROW
BEGIN 
   UPDATE `group_chat_message` SET 
   `server_modified_at` = CONCAT(SUBSTRING(REPLACE(NOW(), '-', ''),1,8),SUBSTRING(REPLACE(NOW(), ':', ''),12,8))
    WHERE id = NEW.id
    ;
END;$$
DELIMITER ;

error when trigger executed.

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Вы должны просто изменить ваше CREATE TABLE -Statement:

То, что вам нужно, может быть достигнуто без триггера, используя ON UPDATE для меток времени и / или столбцов DateTime:

CREATE TABLE t1 (
  some columns,
  lastModified_ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  lastModified dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

Поля будут установлены на NOW() каждый раз, когда строка изменяется (ON UPDATE) или создается (DEFAULT).

https://dev.mysql.com/doc/refman/8.0/en/timestamp-initialization.html

0 голосов
/ 31 декабря 2018

Ваш триггер должен быть:

DELIMITER $$
CREATE TRIGGER after_user_update BEFORE UPDATE ON group_chat_message
FOR EACH ROW
BEGIN 
   SET NEW.`server_modified_at` = CONCAT(SUBSTRING(REPLACE(NOW(), '-', ''),1,8),SUBSTRING(REPLACE(NOW(), ':', ''),12,8));
END;$$
DELIMITER ;

Таким образом, в основном вы должны запускать его ДО, а не ПОСЛЕ, и вам не нужно создавать эту инструкцию UPDATE в триггере.Вместо этого просто измените значение NEW на server_modified_at перед обновлением строки


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

server_modified_at TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP

и MySQL автоматически установит текущую метку времени в столбце server_modified_at при обновлении строки, для этого не требуется триггер.

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