触发器 1、为什么需要触发器: 比如老王从员工表里面退休了,一旦delete from emp 马上就触发器把老王放在了退休员工表里面 2、什么是触发器 MySQL的触发器和存储过程一样,都是嵌入到MySQL的一段程序。 利用MySQL触发器可以对表进行增、删、改操作同时响应另一张表做出操作。 语法: create trigger triggerName after insert on order for each row UPDATE t_good SET goodNum=goodNum-new.orderNum WHERE id=new.orderId; 3、使用: CREATE TABLE t_good( -- 主键 id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, -- 商品名称 goodName VARCHAR(20), -- 商品数量 goodNum INT UNSIGNED ) CREATE TABLE t_order( -- 主键ID id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, -- 订单ID orderId INT UNSIGNED, -- 订单数量 orderNum INT UNSIGNED ) -- 插入数据,三本书,数量都是10本。 INSERT INTO t_good(goodName,goodNum)VALUES('Java编程思想',10), ('Java哈哈',10), ('Mysql',10) -- 创建触发器 CREATE TRIGGER good_order_trigger AFTER INSERT ON t_order FOR EACH ROW UPDATE t_good SET goodNum=goodNum-new.orderNum WHERE id=new.orderId; -- 要买的第二本书,三本,测试通过。 INSERT INTO t_order(orderId,orderNum)VALUES(2,3); -- 但是我发现还存在两种情况,当用户删除一个订单的时候, -- 我们直接删除一个订单, -- 我们是不是需要把对应的商品的数量再加上去呢? -- 解决这个问题 CREATE TRIGGER good_order_trigger2 AFTER DELETE ON t_order FOR EACH ROW UPDATE t_good SET goodNum=(goodNum)+old.orderNum WHERE id =old.orderId; -- 测试triiger 2 OK DELETE FROM t_order WHERE id=1; -- 既然都这样了,我们不如把那个也操作了算了。 -- 还有一个是什么,update是吧,我根据自己的理解来个测试。 CREATE TRIGGER good_order_trigger3 AFTER UPDATE t_order FOR EACH ROW UPDATE t_good SET goodNum=goodNum+old.goodNum-new.goodNum WHERE id=old.orderId; 4:注意 new是新插入的数据,old是原来的数据 insert只会有new,代表着要插入的新记录 delete只会有old,代表着要删除的记录 -- 注意,单独的一个表只能有一个触发器,就是insert只能有一个,delete有一个。
转载请注明原文地址: https://www.6miu.com/read-11099.html