1、啥是触发器:
数据库的触发器总让我想起程序中的事件。 它是在某个条件达到后自动执行一系列语句以完成某个功能。
对于数据库来说,触发器是在执行了delete, insert,update的某些语句后自动执行的一条或多条语句。
目前mysql5仅表的delete ,insert,update,支持触发器,视图不支持。
2、创建触发器
CREATE TRIGGER test //创建一个名为test的触发器
AFTER INSERT ON Task //after 是insert动作执行完之后将执行触发器; before 是insert动作执行之前执行触发器
FOR EACH ROW //触发器内容将对每行都起作用
begin
delete from Task where Czid = 123456; //触发器语句
end
对于mysql来说只有delete ,insert,update这三个事件才能关联触发器,一个表最多关联6个触发器(这三个事件的之前或之后)
3、删除触发器
DROP TRIGGER test;
触发器不能更新,如果要修改一个触发器,应先删除再创建
4、Insert触发器
1) Insert 触发器代码内,可引用一个名为New的虚拟表,访问被插入的行。
2) 在before insert 触发器中,new中的允许被更改的值也会被更新
3) 对于AUTO_INCREMENT列,new虚拟表中执行之前为0,执行之后为自动生成的新值
new 的使用例子:
CREATE TRIGGER test
AFTER INSERT ON Task
FOR EACH ROW
begin
select new.czid; //触发器语句
end
5、Delete 触发器
1) 在delete触发器中,可引用一个名为OLD的虚拟表,访问被删除的行。
2)OLD中的值只读不更新
实例:
CREATE TRIGGER test
AFTER DELETE ON Task
FOR EACH ROW
begin
INSERT INTO Bak_Task(Cizd, date);
values(OLD.Czid, OLD.Date);//当删除一个任务时将这个任务添加的任务备份表中
end;
6、Update触发器
1)在Update触发器代码中,可有引用名为OLD虚拟表访问Update之前的值,引用NEW虚拟表
访问更新的值
2)在before update 触发器中,NEW中的值可能也被更新,允许更改将要用于update语句中的值
3) OLD中的值全都是只读的,不能更新
注:mysql5中触发器不支持CALL语句,即不能在触发器中调用存储过程,只能将存储过程的代码拷贝来用。