觸發(fā)器是由MySQL 的基本命令事件來觸發(fā)某種特定操作,這些基本命令由insert、update、delete等事件觸發(fā)某些特定操作。
創(chuàng)建單條執(zhí)行語句的MySQL觸發(fā)器:
create trigger trigger_name before | after insert | update | delete
on table_name for each row?
執(zhí)行語句
demo1;(插入tb_studentinfo時先插入tb_log)
delimiter //
create trigger insert_log before insert
on tb_studentinfo for each row?
insert into tb_log(time) values(now());
//
delimiter;
創(chuàng)建多條執(zhí)行語句的MySQL觸發(fā)器:
create trigger trigger_name before | after insert | update | delete
on table_name for each row?
begin
執(zhí)行語句;
執(zhí)行語句;
end
demo1:
delimiter //
create trigger delete_time after delete
on tb_studentinfo for each row
begin
insert into tb_log(time) values(now());
insert into tb_opt(str) values("delete");
end
//
delimiter;
注意:對于相同的觸發(fā)器事件如(insert,update,delete)before和after觸發(fā)器只能各一個。
查看觸發(fā)器:
show triggers;
//? 查看到該庫所有的觸發(fā)器;
select * from information_schema.triggers;
select * from information_schema.triggers where trigger_name = 'trigger_names';
//? 所有觸發(fā)器都定義在information_schema庫(默認(rèn)存在的庫)的triggers表中。
觸發(fā)器按照:before、 insert | update | delete 操作 、after的順序來執(zhí)行。
注意:觸發(fā)器中不能包含STARTTRANSCATION、COMMIT、ROLLBACK、CALL語句等。已經(jīng)更新過的數(shù)據(jù)表是不能回滾的。
刪除觸發(fā)器:
DROP trigger trigger_name;