数据库触发器详解(4)

来源:未知 责任编辑:责任编辑 发表时间:2014-05-20 18:34 点击:

?   Insert型触发器:可能通过insert语句,load data语句,replace语句触发;
?   Update型触发器:可能通过update语句触发;
?   Delete型触发器:可能通过delete语句,replace语句触发;
 
3   Mysql触发器的执行顺序
 
先抛出触发器相关的几个问题
 
3.1   如果before类型的触发器程序执行失败,sql会执行成功吗?
 
实验如下:
 
1)在FC_Word.planinfo中建立before触发器:
 
DELIMITER |
create trigger trigger_before_planinfo_update
before update
ON FC_Word.planinfo FOR EACH ROW
BEGIN
insert into FC_Output.abc (planid) values (New.planid);
END
|
 
2)查看:mysql> select showprob from planinfo where planid=1;
 
+----------+
| showprob |
+----------+
|        2 |
+----------+
 
3)执行sql:
 
update planinfo set showprob=200 where planid=1;      触发触发器程序;
 
4)由于不存在FC_Output.abc,before触发器执行失败,提示:
 
ERROR 1146 (42S02): Table 'FC_Output.abc' doesn't exist
 
5)再次查看:
 
mysql> select showprob from planinfo where planid=1;
+----------+
| showprob |
+----------+
|        2 |
+----------+
 
即修改sql未执行成功。即如果before触发器执行失败,sql也会执行失败。
 
3.2   如果sql执行失败,会执行after类型的触发器程序吗?
 
实验如下:
 
1)在FC_Word.planinfo中建立after触发器:
 
DELIMITER |
create trigger trigger_after_planinfo_update
after update
ON FC_Word.planinfo FOR EACH ROW
BEGIN
INSERT INTO FC_Output.fcevent set level = 2, type = 2, tabid = 5, userid = NEW.userid, planid = NEW.planid, planstat2 = NEW.planstat2, showprob = NEW.showprob, showrate = NEW.showrate, showfactor = NEW.showfactor, planmode = NEW.planmode;
END
|
 
2)查看触发表:
 
mysql> select * from FC_Output.fcevent where planid=1;
Empty set (0.00 sec)
 
没有planid=1的记录
 
3)执行sql:
 
mysql> update planinfo set showprob1=200 where planid=1;
 
4)由于不存在showprob1列,提示错误:
 
ERROR 1054 (42S22): Unknown column 'showprob1' in 'field list'
 
5)再次查看触发表:
 
mysql> select * from FC_Output.fcevent where planid=1;
Empty set (0.00 sec)
 
触发表中没有planid=1的记录,sql在执行失败时,after型触发器不会执行。
 
3.3   如果after类型的触发器程序执行失败,sql会回滚吗?
 
实验如下:
 
1)在FC_Word.planinfo中建立after触发器:
 
DELIMITER |
create trigger trigger_after_planinfo_update
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • mysql-mmm
  • mysqldump命令——MySQL数据库备份还原
  • Oracle数据导入MySQL的快捷工具:MySQL Migration Toolkit
  • 简简单单储存过程——循环一个select结果集
  • MySQL数据库十大优化技巧
  • Mysql安装笔记
  • Mysql主主复制架构配置
  • Mysql的Procedure 参数为NULL问题分析
  • MySQL Stmt预处理提高效率问题的小研究
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1