Mysql触发器实例教程(创建 删除 修改 查看)

萧红SEO SEO爱好者,分享SEO经验~

在学习mysql不久接触到了mysql触发器这个新功能了,以前在msssql有了解过但没深入,今天要用到mysql触发器功能了,深入的整理了一些关于触发器相关技术内容,希望对各位有帮助吧.

1.创建触发器的语句:

  1. CREATETRIGGER<触发器名称><--
  2. {BEFORE|AFTER}
  3. {INSERT|UPDATE|DELETE}
  4. ON<表名称>
  5. FOREACHROW
  6. <触发器SQL语句>
  7. -触发器
  8. --createtrigger名字
  9. --on表名
  10. --触发动作
  11. --for/afterinsert/update/delete
  12. --as
  13. --t-sql
  14. select*fromshop_jb
  15. --insertintoshop_xsvalues(6,4000,1,GETDATE(),3)
  16. --updateshop_jbsetstock=stock-1whereid=6
  17. --创建触发器
  18. createtriggertri1
  19. onshop5_xs
  20. afterinsert
  21. as
  22. updateshop3_jbsetstock=stock-1whereid=6
  23. ---触发器更新完之后,要查看表
  24. createtriggertri3
  25. onshop3_jb
  26. forupdate
  27. as
  28. select*fromshop3_jb
  29. updateshop3_jbsetspec='sp-Z99'whereid=2
  30. droptriggertri1
  31. ---用存储过程来实现,更新完之后,要查看表
  32. alterprocproc1
  33. as
  34. updateshop3_jbsetspec='sp-111'whereid=2
  35. select*fromshop3_jb
  36. execproc1
  37. ---查看表的触发器
  38. execsp_helptrigger表名
  39. ---查看表的内容
  40. execsp_helptext触发器名
  41. ---删除触发器
  42. droptrigger触发器名

提示:你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER),如果你已经是Root用户,那么就足够了,这跟SQL的标准有所不同.

实例:example1,创建表tab1,代码如下:

  1. DROPTABLEIFEXISTStab1;
  2. CREATETABLEtab1(
  3. tab1_idvarchar(11)
  4. );
  5. //创建表tab2:
  6. DROPTABLEIFEXISTStab2;
  7. CREATETABLEtab2(
  8. tab2_idvarchar(11)
  9. );//开源软件:phpfensi.com

创建触发器:t_afterinsert_on_tab1

作用:增加tab1表记录后自动将记录增加到tab2表中,代码如下:

  1. DROPTRIGGERIFEXISTSt_afterinsert_on_tab1;
  2. CREATETRIGGERt_afterinsert_on_tab1
  3. AFTERINSERTONtab1
  4. FOREACHROW
  5. BEGIN
  6. insertintotab2(tab2_id)values(new.tab1_id);
  7. END;

测试一下:INSERT INTO tab1(tab1_id) values('0001');

看看结果估计两个表都有相同数据,代码如下:

  1. createtriggertri1
  2. onshop3_jb
  3. afterinsert
  4. as
  5. select*frominserted
  6. insertintoshop3_jbvalues('洗衣机','aa',200,500,getdate())
  7. select*fromshop3_jb
  8. execsp_helptriggershop3_jb
  9. execsp_helptexttri1
  10. droptriggertri1
  11. createtriggertri2
  12. onshop3_jb
  13. afterdelete
  14. as
  15. select*fromdeleted
  16. deletefromshop3_jbwherenamel='笔记本'
  17. select*fromshop3_jb
  18. ---查看表的触发器
  19. execsp_helptrigger表名
  20. ---查看表的内容
  21. execsp_helptext触发器名
  22. ---删除触发器
  23. droptrigger触发器名
  24. select*fromshop5_xs
  25. select*fromshop3_jb
  26. //开源软件:phpfensi.com

补充语法

触发器 语法

3.1 CREATE TRIGGER trigger_name trigger_time trigger_event

ON tbl_name FOR EACH ROW trigger_stmt

trigger_time是触发程序的动作时间,它可以是BEFORE或AFTERtrigger_event指明了激活触发程序的语句的类型,trigger_event可以是下述值之一.

• INSERT:将新行插入表时激活触发程序,例如,通过INSERT、LOAD DATA和REPLACE语句。

• UPDATE:更改某一行时激活触发程序,例如,通过UPDATE语句.

• DELETE:从表中删除某一行时激活触发程序,例如,通过DELETE和REPLACE语句.

3.2 可能遇到的问题

如果你在触发器里面对刚刚插入的数据进行了 insert/update,会造成循环的调用,如:

create trigger test before update on test for each row update test set NEW.updateTime = NOW() where id=NEW.ID; END

应该使用set:create trigger test before update on test for each row set NEW.updateTime = NOW(); END

3.3 触发器 与存储过程

触发程序不能调用将数据返回客户端的存储程序,也不能使用采用CALL语句的动态SQL,允许存储程序通过参数将数据返回触发程序,而存储过程可以接受参数,将结果范围给应用程序.

相关广告
  • Mysql触发器实例教程(创建 删除 修改 查看) Mysql触发器实例教程(创建 删除 修改 查看) Mysql触发器实例教程(创建 删除 修改 查看)
相关阅读

Mysql触发器实例教程(创建 删除 修改 查看)

2019/10/10 17:37:44 | 谷歌SEO算法 | 自学SEO