触发器
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