gpt4 book ai didi

mysql - 要使用触发器记录对表的所有更改,事件需要在之前或之后

转载 作者:行者123 更新时间:2023-11-29 19:08:29 25 4
gpt4 key购买 nike

这是一个名为 user_log 的表:

CREATE TABLE user_log (
id INT(10) UNSIGNED PRIMARY KEY auto_increment,
user_id INT (10),
name VARCHAR (50),
username VARCHAR (32),
password VARCHAR (32),
email VARCHAR(255) NOT NULL,
user_type_id INT (11),
created DATETIME NOT NULL
);

创建一个触发器,将对用户表的所有更改记录到上面的 user_log 表中。它应该将旧值插入日志表中。

这是我所拥有的:

DELIMITER $$
CREATE TRIGGER changes_log AFTER UPDATE ON user_log
FOR EACH ROW
BEGIN
IF (OLD.user_id != NEW.user_id) THEN
INSERT INTO user_log (id, name, username, password, email,
user_type_id, created)
VALUES(OLD.id, OLD.name, OLD.username, OLD.password, OLD.email,
OLD.user_type_id, OLD.created, NOW(), 'Entry Updated');
END IF;
END$$

这是否成功触发了将对 users 表的所有更改记录到我上面创建的 user_log 表中?

最佳答案

我建议使用 AFTER 触发器。 AFTER 触发器在 users 表中成功更新后运行。如果存在阻止更新成功的错误(例如违反约束或类似的情况),则不会发生任何更改,因此无需记录它。

我注意到,只有当用户 ID 更改时,触发逻辑才会记录更改,因为这一行:

IF (OLD.user_id != NEW.user_id) THEN

但是如果其他列发生变化怎么办?例如,如果用户的电子邮件发生更改,您是否不想记录更改?

关于mysql - 要使用触发器记录对表的所有更改,事件需要在之前或之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43299277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com