Mysql学习——触发器

mac2022-06-30  26

  触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力。说白了就是监视(增,删,改)某种情况并触发(增,删,改)某种操作。比如说在淘宝上买东西,顾客下了一个订单,即往订单表中插入了一条数据,那么在库存表中就会减少一条数据,这两个过程是一体的,这时候就比较适合用触发器来进行相关的操作。

  1.触发器的四要素:

  2.触发器的创建语法:

  create trigger tirggerName

  after/before(触发时间)   insert/update/delete (监视事件)     on  表名 (监视地址) 

  For each row #这句话是固定的

  Begin

  Sql语句  #一句或多句,insert/update/delete范围内

  End;

  3.触发器中引用行的值

  对于insert而言,新增的行new来表示,行中的每一列的值,用new.列名来表示

  对于delete来说,原本有一行,后来被删除,想引用被删除的这一行,用old,来表示old.列名,就可以引用被删除行中的值

  对于update来说,被修改的行,修改前的数据,用old来表示,old.列名引用被修改之前行中的值修改后的数据,用new来表示,new.列名引用被修改之后行中的值

  4.实例:建立商品表和订单表,并插入相关数据

1 #建立商品表 2 Create table goods( 3 Id int, 4 Name varchar(10), 5 Num int 6 )charset utf8; 7 #建立订单表 8 Create table order( 9 Oid int, 10 Gid int, 11 Much int, 12 )charset utf8; 13 14 Insert into goods 15 Values 16 (1,'',22), 17 (2,'',19), 18 (3,'',12), 19 (4,'',8); View Code

  ①添加订单,库存减少

    a.先创建触发器:

    DELIMITER $$(必须加上,否则创建不成功)

    CREATE TRIGGER tg1    AFTER INSERT ON order1    FOR EACH ROW    BEGIN     UPDATE goods SET num=num-new.much WHERE id=new.gid;    END;    $$

    b.向order1表中插入一条数据:INSERT INTO order1 VALUES(1,3,50);

    c.查看订单表和商品表,结果是一致的,说明触发器应用是成功的。

    

 

  2.删除订单,库存增加 

1 #删除订单,库存增加 2 DELIMITER $$ 3 CREATE TRIGGER tg2 4 AFTER DELETE ON order1 5 FOR EACH ROW 6 BEGIN 7 UPDATE goods SET num=num+old.much WHERE id=old.gid; 8 END; 9 $$ 10 #删除订单表中的添加的数据 11 DELETE FROM order1 WHERE oid=1; 12 #显示商品表中的数据 13 SELECT * FROM goods; View Code

  3.修改订单的数量时,库存相应改变

1 #修改订单的数量时,库存相应改变 2 DELIMITER $$ 3 CREATE TRIGGER tg3 4 AFTER UPDATE ON order1 5 FOR EACH ROW 6 BEGIN 7 UPDATE goods SET num=num+old.much-new.much WHERE id=old.gid; 8 END; 9 $$ 10 #修改订单 11 UPDATE order1 SET much = 5 WHERE oid =1; 12 #显示商品表中的数据 13 SELECT * FROM goods; View Code

 

  

 

转载于:https://www.cnblogs.com/LCH-7/p/8356246.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)