mysql

xiaoxiao2021-02-27  237

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

最新回复(0)