mysql学习之触发器

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语句,即不能在触发器中调用存储过程,只能将存储过程的代码拷贝来用。  

          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值