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