我想在一行中发生任何更改后更新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 ;
2条答案
按热度按时间yrefmtwq1#
你的触发器应该是:
所以基本上,您应该在触发器之前而不是之后触发它,并且不需要在触发器中创建这个更新指令。相反,只需修改
server_modified_at
更新行之前请注意,如果目的是在修改记录时存储时间戳,则可以在表中创建如下列:
当行被更新时,mysql会自动将当前时间戳设置为服务器的\u modified \u at列,您不需要为此设置触发器。
2g32fytz2#
你应该简单地修改你的
CREATE TABLE
-声明:你所需要的可以通过使用
ON UPDATE
对于时间戳和/或日期时间列:字段将设置为
NOW()
每次修改行时(ON UPDATE
)或创建(DEFAULT
).https://dev.mysql.com/doc/refman/8.0/en/timestamp-initialization.html