MySQL触发器的正确用法

一、创建触发器的基本语法:

CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件 ON 表名 FOR EACH ROW 触发器语句

触发事件包括:INSERT、UPDATE、DELETE

二、正确案例演示

如果想在sql文件中直接创建触发器,下面为一个完整的sql文件创建(含触发器的创建)示例:

  1. use mysql
  2. drop database if exists myTest;
  3. create database myTest default charset=gb2312;
  4. use myTest;
  5. create table Stud
  6. (
  7. sno int(8),
  8. sname varchar(64),
  9. ssex varchar(64),
  10. sage int(4) ,
  11. sdep varchar(128)
  12. );
  13. create table Scsc
  14. (
  15. sno int(8),
  16. cno int(4),
  17. grade int(4)
  18. );
  19. insert into Stud(sno,sname,ssex,sage,sdep) values(2006126001,‘lwj‘,‘female‘,19,‘com scen‘);
  20. insert into Stud(sno,sname,ssex,sage,sdep) values(2006126002,‘fj‘,‘male‘,20,‘com scen‘);
  21. insert into Scsc(sno,cno,grade) values(2006126001,1001,70);
  22. insert into Scsc(sno,cno,grade) values(2006126002,1002,85);
  23. -- 注意下面mysql的触发器的用法:
  24. -- 当其放在sql语句中与数据库/表一起创建的时候
  25. -- 必须重定义结束符为$$(代替;),否则创建出错。
  26. -- 且创建触发器的过程要放在quit的前面,这样
  27. -- 不至于造成常规的sql语句无法执行问题。
  28. delimiter $$
  29. drop trigger if exists delTrigger$$
  30. create trigger delTrigger after delete on Stud for each row
  31. begin
  32. declare oldsno char(10);
  33. set oldsno=old.sno;
  34. delete from Scsc where sno=oldsno;
  35. end$$
  36. drop trigger if exists updateTgr$$
  37. create trigger updateTgr after update on Stud for each row
  38. begin
  39. declare newsno char(10);
  40. declare oldsno char(10);
  41. set newsno = NEW.sno;
  42. set oldsno = OLD.sno;
  43. if newsno<>oldsno then
  44. update Scsc set sno=newsno where sno=oldsno;
  45. end if;
  46. end$$
  47. quit

图1 创建成功

图2 更新触发测试

三、易错问题

而下面的写法虽然语法上没有问题,但是却无法直接写到sql文件中的!原因不明!

  1. ------- Error usage
  2. drop trigger if exists delTrigger
  3. create trigger delTrigger after delete on Stud for each row
  4. begin
  5. declare oldsno char(10);
  6. set oldsno=old.sno;
  7. delete from Scsc where sno=oldsno;
  8. end
  9. drop trigger if exists updateTgr
  10. create trigger updateTgr after update on Stud for each row
  11. begin
  12. declare newsno char(10);
  13. declare oldsno char(10);
  14. set newsno = NEW.sno;
  15. set oldsno = OLD.sno;
  16. if newsno<>oldsno then
  17. update Scsc set sno=newsno where sno=oldsno;
  18. end if;
  19. end
  20. ------- Error usage

图3

MySQL触发器的正确用法,布布扣,bubuko.com

时间: 2024-08-02 07:01:18

MySQL触发器的正确用法的相关文章

MySQL触发器如何正确使用

MySQL触发器如何正确使用 2010-05-18 15:58 佚名 博客园 字号:T | T 我们今天主要向大家介绍的是MySQL触发器进行正确使用,其中包括对MySQL触发器发器的语句创建,触发时间与触发事件等相关内容介绍. AD:51CTO 网+首届APP创新评选大赛火热启动——超百万资源等你拿! 以下的文章主要描述的是如何对MySQL触发器进行正确使用, MySQL数据库是在5.0 以后的相关版本中对MySQL触发器进行引用,有时也可以用相关的触发器对数据的完整性进行维护.如我有一个表g

mysql 触发器语法详解

1.创建Mysql触发器: 语法: CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW BEGIN trigger_stmt //语句块 END: CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW BEGIN trigger_stmt END:大写的为关键字 trigger_nam

mysql触发器用法详解

MySQL触发器语法详解: 触发器 trigger是一种特殊的存储过程,他在插入(inset).删除(delete)或修改(update)特定表中的数据时触发执行,它比数据本身标准的功能更精细和更复杂的数据控制能力.触发器不是由程序调用,而是由某个事件来触发的.在有数据修改时自动强制执行其业务规则,经常用于加强数据的完整性约束和业务规则等.触发器可以查询其他表,而且包含复制的sql语句.触发器也可用于强制引用完整性.触发器可以强制比用check约束定义的约束更为复杂的约束. (一).CREATE

mysql触发器的实战经验-不错的文章

1   引言Mysql的触发器和存储过程一样,都是嵌入到mysql的一段程序.触发器是mysql5新增的功能,目前线上凤巢系统.北斗系统以及哥伦布系统使用的数据库均是mysql5.0.45版本,很多程序比如fc-star管理端,sfrd(das),dorado都会用到触发器程序,实现对于数据库增.删.改引起事件的关联操作.本文介绍了触发器的类型和基本使用方法,讲述了触发器使用中容易产生的误区,从mysql源码中得到触发器执行顺序的结论,本文最后是实战遭遇的触发器经典案例.没有特殊说明时,本文的实

MySQL触发器分析

触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力. 数据库触发器有以下的作用: 1.安全性.可以基于数据库的值使用户具有操作数据库的某种权利. # 可以基于时间限制用户的操作,例如不允许下班后和节假日修改数据库数据. # 可以基于数据库中的数据限制用户的操作,例如不允许股票的价格的升幅一次超过10%. 2.审计.可以跟踪用户对数据库的操作. # 审计用户操作数据库的语句. # 把用户对数据库的更新写入审计表. 3.实

mysql 触发器开荒

mysql触发器平常没怎么用到过,这次用到了,感觉特别方便.简单总结一下用法. 先看一下我写的这两个触发器: /*更新触发器*/ DROP TRIGGER IF EXISTS t_update_on_t_tradefee; CREATE TRIGGER t_update_on_t_tradefee BEFORE UPDATE ON t_tradefee FOR EACH ROW BEGIN IF (NEW.margin_profit - OLD.margin_profit)!=0 THEN in

猎八哥浅谈MYSQL触发器

什么是MYSQL触发器,我们先了解一下触发的意思.触发的字面意思是指因触动而激发起某种反应. MYSQL必知必会中对触发器的解释是:MySQL响应以下任意语句而自动执行的一条MySQL语句(或位于 BEGIN 和 END 语句之间的一组语句).其中以下任意语句是指:delete,insert,update. 我对mysql中触发器的理解是mysql数据库的数据内容造成改变时(增加.删除.添加)执行的一个行为. 特别注意:当你进行查询数据时无法调动触发器(我的理解是此时数据库中的内容无法发生改变调

mysql中event的用法详解

一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存储过程使用,在某一特定的时间点,触发相关的SQL语句或存储过程. 二.适用范围对于每隔一段时间就有固定需求的操作,如创建表,删除数据等操作,可以使用event来处理. 例如:使用event在每月的1日凌晨1点自动创建下个月需要使用的三张表. 三.使用权限单独使用event调用SQL语句时,查看和创建

【转】mysql触发器的实战(触发器执行失败,sql会回滚吗)

1   引言 Mysql的触发器和存储过程一样,都是嵌入到mysql的一段程序.触发器是mysql5新增的功能,目前线上凤巢系统.北斗系统以及哥伦布系统使用的数据库均是mysql5.0.45版本,很多程序比如fc-star管理端,sfrd(das),dorado都会用到触发器程序,实现对于数据库增.删.改引起事件的关联操作.本文介绍了触发器的类型和基本使用方法,讲述了触发器使用中容易产生的误区,从mysql源码中得到触发器执行顺序的结论,本文最后是实战遭遇的触发器经典案例.没有特殊说明时,本文的