• Mysql触发器实例分析


            所谓触发器,就是在定义在表对象上。当触发器所在的表出现指定的事件时,会触发对应表的delete update insert的操作。说的有点绕口,其实就是到监视某种情况,然后去触发某种操作。

            触发器是如何来进行定义的呢?

            在定义时要注意四个基本的语法要素:

     1 1.监视地点(某张table)
     2 2.监视事件(insert/update/delete) 
     3 3.触发时间(触发时的时机after/before,在事件执行之后或者在事件执行之前) 
    4.触发事件(insert/update/delete)
    4 5 具体语法: 6 create trigger triggerName 7 after/before insert/update/delete on 表名 8 for each row #这句话在mysql是固定的 9 begin 10 sql语句; 11 end;

    实例的数据库表的结构如下:

     1 SET FOREIGN_KEY_CHECKS=0;
     2 
     3 -- ----------------------------
     4 -- Table structure for tb_goods
     5 -- ----------------------------
     6 DROP TABLE IF EXISTS `tb_goods`;
     7 CREATE TABLE `tb_goods` (
     8   `g_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '商品ID',
     9   `goodname` varchar(20) DEFAULT NULL COMMENT '商品名称',
    10   `goodcount` int(11) DEFAULT NULL COMMENT '商品数目',
    11   PRIMARY KEY (`g_id`)
    12 ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
    13 
    14 
    15 SET FOREIGN_KEY_CHECKS=0;
    16 -- ----------------------------
    17 -- Table structure for tb_orders
    18 -- ----------------------------
    19 DROP TABLE IF EXISTS `tb_orders`;
    20 CREATE TABLE `tb_orders` (
    21   `o_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '订单ID',
    22   `g_id` int(11) DEFAULT NULL COMMENT '商品ID',
    23   `ordercount` int(11) DEFAULT NULL COMMENT '订购数目',
    24   PRIMARY KEY (`o_id`)
    25 ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

    解决如下几个问题:

    (1)当我们向订单表中插入数据时,会将对应的商品的数目减少对应的数量,而不用手动去更新商品的数目。

    初始的商品的数目:

     1 insert into tb_orders(g_id,ordercount) values(1,2) 2 #向订单表中给商品编号为1的插入一条记录,则对应的商品ID为1的数目减2 3 #商品的数目 

    (2)当我们删除订单表中数据时,会将对应的商品的数目恢复到对应的数量。

    delete from tb_orders where g_id = 1 #删除订单表中 商品编号为1的订单  则触发商品ID为2的商品数目恢复原来

     

    (3)更新订单信息,则修改对应的商品的数目的信息

    对应的触发器:

    数据库中数据变化:

    update tb_orders set ordercount = 2 where g_id = 1  #更新订单表中商品id为1的订单的数目 则触发商品表中数目变化 

  • 相关阅读:
    js设置奇偶行数样式
    c#简单的调试信息、日志信息输出
    调用接口
    sql日期转换格式
    .net 常用方法
    日常验证
    Js 返回页面 or 跳转页面
    .NET Core Kestrel部署HTTPS以及Docker部署HTTPS
    Linux openssl生成证书
    ASP.NET Core中使用AutoMapper实现自动转化
  • 原文地址:https://www.cnblogs.com/jiaqingshareing/p/7514867.html
Copyright © 2020-2023  润新知