Mysql学习——触发器

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

  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