当前位置:首页 > Mysql教程 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2014-09-23 22:25:25 浏览: 评论:0 

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

1.创建触发器的语句:

  1. CREATE TRIGGER <触发器名称> <-- 
  2. { BEFORE | AFTER } 
  3. { INSERT | UPDATE | DELETE } 
  4. ON <表名称> 
  5. FOR EACH ROW 
  6. <触发器SQL语句> 
  7. -触发器 
  8. --create trigger 名字 
  9. --on 表名 
  10. --触发动作 
  11. --for/after insert/update/delete 
  12. --as 
  13. --t-sql 
  14. select * from shop_jb 
  15. --insert into shop_xs values(6,4000,1,GETDATE(),3) 
  16. -- update shop_jb set stock=stock-1 where id=6 
  17. --创建触发器 
  18. create trigger tri1 
  19. on shop5_xs 
  20. after insert 
  21. as 
  22. update shop3_jb set stock=stock-1 where id=6 
  23. ---触发器更新完之后,要查看表 
  24. create trigger tri3 
  25. on shop3_jb 
  26. for update 
  27. as 
  28. select * from shop3_jb 
  29. update shop3_jb set spec='sp-Z99' where id=2 
  30. drop trigger tri1 
  31. ---用存储过程来实现,更新完之后,要查看表 
  32. alter proc proc1 
  33. as 
  34. update shop3_jb set spec='sp-111' where id=2 
  35. select * from shop3_jb 
  36. exec proc1 
  37. ---查看表的触发器 
  38. exec sp_helptrigger 表名 
  39. ---查看表的内容 
  40. exec sp_helptext 触发器名 
  41. ---删除触发器 
  42. drop trigger 触发器名 

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

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

  1. DROP TABLE IF EXISTS tab1; 
  2. CREATE TABLE tab1( 
  3. tab1_id varchar(11) 
  4. ); 
  5. //创建表tab2: 
  6. DROP TABLE IF EXISTS tab2; 
  7. CREATE TABLE tab2( 
  8. tab2_id varchar(11) 
  9. );//开源软件:phpfensi.com 

创建触发器:t_afterinsert_on_tab1

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

  1. DROP TRIGGER IF EXISTS t_afterinsert_on_tab1; 
  2. CREATE TRIGGER t_afterinsert_on_tab1 
  3. AFTER INSERT ON tab1 
  4. FOR EACH ROW 
  5. BEGIN 
  6. insert into tab2(tab2_id) values(new.tab1_id); 
  7. END; 

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

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

  1. create trigger tri1 
  2. on shop3_jb 
  3. after insert 
  4. as 
  5. select * from inserted 
  6. insert into shop3_jb values('洗衣机','aa',200,500,getdate()) 
  7. select * from shop3_jb 
  8. exec sp_helptrigger shop3_jb 
  9. exec sp_helptext tri1 
  10. drop trigger tri1 
  11. create trigger tri2 
  12. on shop3_jb 
  13. after delete 
  14. as 
  15. select * from deleted 
  16. delete from shop3_jb where namel='笔记本' 
  17. select * from shop3_jb 
  18. ---查看表的触发器 
  19. exec sp_helptrigger 表名 
  20. ---查看表的内容 
  21. exec sp_helptext 触发器名 
  22. ---删除触发器 
  23. drop trigger 触发器名 
  24. select * from shop5_xs 
  25. select * from shop3_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,允许存储程序通过参数将数据返回触发程序,而存储过程可以接受参数,将结果范围给应用程序.

Tags: Mysql触发器 Mysql创建

分享到: