我试图通过分别捕获插入和更新的用户ID和时间戳来实现行级审计。但由于某种原因,即使对于更新,插入触发器也会触发,并且每次都会更新两个insert_ *列(对于更新也是如此)。 请帮忙。
表
create table test
(id varchar(30) primary key,
insert_id varchar(30),
insert_timestamp timestamp,
update_id varchar(30),
update_timestamp timestamp);
BEFORE INSERT触发器
DELIMITER //
create trigger ins_test
before insert on test
for each row
Begin
set new.insert_id = session_user();
set new.insert_timestamp = now();
End;
//
BEFORE UPDATE触发器
DELIMITER //
create trigger upd_test
before update on test
for each row
Begin
set new.update_id = session_user();
set new.update_timestamp = now();
End;
//
-Ganesh
答案 0 :(得分:0)
我在SQL Fiddle的MySQL 5.5.30中尝试了你的代码,触发器正常工作。
如果您不希望它们在插入时默认为current_timestamp,则应将timestamp列显式定义为NULL:
create table test
(
id varchar(30) primary key,
insert_id varchar(30) null,
insert_timestamp timestamp null,
update_id varchar(30) null,
update_timestamp timestamp null
);
试试这个SQL Fiddle,看看您的触发器是否正常工作。我在每个语句之间添加了1秒的睡眠,因此您可以告诉insert_timestamp在更新时不会更改。