触发器

 

 1 -- 触发器 
 2     -- 事件类型:增删改
 3     -- 触发时间: 前后 before after
 4     -- 触发对象:表中的每一条记录
 5 -- 一张表中只能有一种触发时间的一种类型的触发器,最多一张表能有6个触发器
 6 
 7 -- 创建触发器
 8     -- 在mysql高级结构中没有大括号,都是用对应字符符号代替
 9     
10     --  临时修改语句结束符
11     DELIMITER 自定义符号      后需代码中碰到自定义符号 语句结束
12     
13     CREATE TRIGGER 触发器名字 触发时间 时间类型  ON 对象(表名) FOR EACH  ROW
14     
15     BEGIN     -- 代表大括号 :开始
16     
17         -- 触发器内容: 每行内容都必须使用语句结束符: 分号
18         
19     END      -- 代表大括号:结束
20     
21     --  语句结束符 
22         -- 自定义符号
23     -- 将临时修改 修正过来
24     DELIMITER ;
25     
26 -- 实例
27  CREATE TRIGGER after_order AFTER INSERT ON my_order FOR EACH ROW
28  DELIMITER $$
29  BEGIN 
30     UPDATE my_goods SET inv=inv-1 WHERE id = 2;
31  END     
32  $$
33  DELIMITER ;
34     
35         

 

 1 -- 查看所有触发器 
 2     SHOW TRIGGERS
 3 -- 查看触发器创建语句
 4     SHOW CREATE TRIGGER 触发器名字
 5 -- 所有触发器都保存在一张表中 information_schema.triggers 
 6 --  \G 表示命令行输出的格式化
 7     SELECT * FROM information_schema.triggers \G    
 8     
 9 -- 触发器不能修改 ,只能·先删除后添加
10     -- drop trigger 触发器名字
11  
12  -- 触发器记录
13     -- 不管触发器是否触发,只要当某种操作准备执行,
14     -- 系统就会将当前操作的记录的当前状态 和即将执行之后新的状态分别保留下来,供触发器使用    
15     --  其中要操作的保存到old改变后得保存到new 
16     -- 删除时没有new 插入时没有old
17     -- old 和 new都是代表记录本身,任何记录除了数据,还有字段名
18         -- old.字段名 new.字段名   
19           
20     -- 触发器内容    
21     -- UPDATE my_goods SET inv=inv-new.g_number WHERE id = new.id;    
22     

 

posted @ 2017-11-19 17:13  千彧  阅读(196)  评论(0编辑  收藏  举报