我在数据库中有几个表:Users, Profiles, Articles
我还有一个名为Changes
的表,用于管理目的。该表由id, table_name, and date_created
组成。
我需要做的是在常规表(Users, Profiles, Articles
)中添加,删除或更新某些内容时,在Changes
中创建一个新行,其中包含更新表的名称和当前时间戳。 / p>
我已经浏览了一段时间并尝试了许多不同的方法,但没有真正有效。我知道解决方案应该很简单,可能有人可以帮助我。谢谢你的时间。
答案 0 :(得分:1)
因此,在这种情况下,每个常规表after insert
,after update
,after delete
这是您可以为其他人编写的一个表
当您插入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
列(以区分插入,更新和删除)。