MySQL触发变更检测

时间:2015-03-11 09:13:42

标签: mysql triggers

我在数据库中有几个表:Users, Profiles, Articles

我还有一个名为Changes的表,用于管理目的。该表由id, table_name, and date_created组成。 我需要做的是在常规表(Users, Profiles, Articles)中添加,删除或更新某些内容时,在Changes中创建一个新行,其中包含更新表的名称和当前时间戳。 / p>

我已经浏览了一段时间并尝试了许多不同的方法,但没有真正有效。我知道解决方案应该很简单,可能有人可以帮助我。谢谢你的时间。

2 个答案:

答案 0 :(得分:1)

因此,在这种情况下,每个常规表after insertafter updateafter delete

需要9个触发器3

这是您可以为其他人编写的一个表

当您插入Users

delimiter //
create trigger log_user_insert after insert on Users
for each row 
begin
  insert into Changes (table_name,date_created) values ('Users',now());
end; //

delimiter ;

Users

上进行更新时
delimiter //
create trigger log_user_update after update on Users
for each row 
begin
  insert into Changes (table_name,date_created) values ('Users',now());
end; //

delimiter ;

Users

上发生删除时
delimiter //
create trigger log_user_update after delete on Users
for each row 
begin
  insert into Changes (table_name,date_created) values ('Users',now());
end; //

delimiter ;

我建议在表action中添加一个名为Changes的列,并插入每个操作名称,即插入,更新和删除。

答案 1 :(得分:0)

您需要在每个数据表上创建更新,插入和删除触发器:

CREATE TRIGGER upd_changes_users BEFORE UPDATE ON Users
FOR EACH ROW
 BEGIN
     INSERT INTO changes (table_name, date_created) VALUES ('users', NOW());
 END;

此代码假定changes中的id列是auto_generated。您可能还需要考虑在type表中添加changes列(以区分插入,更新和删除)。