zoukankan      html  css  js  c++  java
  • mysql 触发器

    触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,

                               比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 简单讲触发器(trigger)就是监视某种情况,并触发某种操作。

    触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/before) 4.触发事件(insert/update/delete)

    创建触发器:

    //商品表
    CREATE TABLE `g` (
    `gId` int(4) NOT NULL AUTO_INCREMENT,
    `name` varchar(20) NOT NULL,
    `num` int(4) NOT NULL,
    PRIMARY KEY (`gId`)
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
    //订单表
    CREATE TABLE `o` (
      `oId` int(4) NOT NULL AUTO_INCREMENT,
      `gId` int(4) NOT NULL,
      `much` int(4) NOT NULL,
      PRIMARY KEY (`oId`)
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
    //插入数据
    INSERT INTO `g` VALUES ('1', '商品1', '10');
    INSERT INTO `g` VALUES ('2', '商品2', '10');
    INSERT INTO `g` VALUES ('3', '商品3', '10');
    //创建触发器
    CREATE TRIGGER tg1
    AFTER INSERT ON o
    for EACH ROW
    BEGIN
    UPDATE g SET num=num-3 where gId=1;
    END $
    //执行 下订单
    insert into o(gId,much) values(1,3)$
    //删除 触发器 
    drop trigger tg1 $
    
    说明:
      当我们 下订单 购买商品1  3个时  
      执行 select * from g where gId=1
      会发现 num=7  

     案例:

           上面的数据是死数据,但在开发过程中对某件商品购买几件是动态的 (表关系同上)

    //触发器  当用户购买商品时更新商品数量
    create trigger tg2
    after insert on o
    for each row 
    begin
    update g set num=num-new.much where gId=new.gId;
    end $
    //用户下单 (购买商品)
    insert into o(gId,much) values(2,5)$
    //触发器 当用户撤销订单时更新数量
    create trigger tg3
    after delete on o
    for each row
    begin
    update g set num = num + old.much where gId = old.gId;
    end $
    //用户撤销订单
    delete from o where oId = 1 $
    //触发器 用户修改订单内商品的数量
    create trigger tg4
    after update on o
    for each row
    begin
        update g set num = num+old.much-new.much where gId =old.gId/new.gId;
    end $
    //用户修改订单数量
    update o set much =3 where oId = 2 $
    View Code
  • 相关阅读:
    springcloud之consul
    git学习创建项目仓库
    学习vue之路V1.0.0
    使用jquery+ajax+php实现搜索框的功能
    发现一个vue的UI组件库
    一个菜鸟用webpack-vue.js编译过程碰到的坑~~!!
    学习vue之路
    typescript入门
    计算机排序算法
    js中三种变量的声明方式const ; var ; let
  • 原文地址:https://www.cnblogs.com/jalja/p/4635087.html
Copyright © 2011-2022 走看看