这是一个名为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
);
创建一个触发器,将对users表的所有更改记录到上面的user_log表中。它应该将OLD值插入日志表中。
这就是我所拥有的:
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表中?
答案 0 :(得分:0)
我建议使用AFTER触发器。在users表中成功更新后,AFTER触发器将运行。如果出现阻止更新成功的错误(例如违反约束或类似内容),则不会有任何更改,因此无需记录。
我注意到,只有当用户ID发生变化时才会触发逻辑记录更改,因为这行:
IF (OLD.user_id != NEW.user_id) THEN
但是,如果任何其他列发生变化会怎么样?例如,如果用户的电子邮件发生更改,您是否不想记录更改?