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
  • 相关阅读:
    FormsAuthentication 简单使用
    2.0 泛型
    解决Eclipse java build path中Web App Libraries无法自动找到WEBINF的lib目录
    WinHex 15.8 r4 注册信息
    用ClassPathXmlApplicationContext读取Spring配置文件的路径问题
    Installing NFS on CentOS 6.2
    使用XStream对Java对象进行序列化和反序列化
    Eclipse代码注释模板code template
    Timestamp和String的相互转换 Java
    visual studio vs2010 2012 C/C++ 编译找不到mspdb100.dll文件的解决方法
  • 原文地址:https://www.cnblogs.com/jalja/p/4635087.html
Copyright © 2011-2022 走看看