zoukankan      html  css  js  c++  java
  • 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

      

  • 相关阅读:
    mariadb 数据库集群配置
    mariadb 4
    mariadb 3
    mariadb 2
    mariadb 1
    firewalld 防火墙
    k8s集群搭建
    k8s控制器资源
    k8s Ingress和ingress控制器
    k8s service对象
  • 原文地址:https://www.cnblogs.com/LCH-7/p/8356246.html
Copyright © 2011-2022 走看看