• MySql cmd下的学习笔记 —— 有关修饰器的知识(trigger)


    关于触发器的理解:

    进行数据库应用软件的开发时,有时我们碰到表的某些数据的改变时,希望同时

    引起其他相关数据改变的需求,利用触发器就能满足这样的需求。

    触发器能在表中的某些特定数据变化时自动完成某些查询,运用触发器不仅仅可以

    简化程序,而且可以增加程序的灵活性

    触发器是一类特殊的事务:

    可以监视某种数据的操作(insert/update/delete)

    触发相关的操作(insert/update/delete)

    需求:

    商品表:goods

    订单表:ord

    当下一个订单时,对应的商品要相应减少(买几个商品就少几个库存)

    分析:

    监视谁:ord

    监视动作:insert

    触犯时间:after

    触发时间:update

    mysql> create table goods(
        -> gid int,
        -> name varchar(20),
        -> num smallint-> )engine myisam charset utf8;
    Query OK, 0 rows affected (0.07 sec)
    
    mysql> create table ord(
        -> ord int,
        -> gid int,
        -> much smallint
        -> )engine myisam charset utf8;
    Query OK, 0 rows affected (0.07 sec)

    mysql> insert into goods
    -> values
    -> (1, 'cat', 14),
    -> (2, 'dog', 65),
    -> (3, 'horse', 21);
    Query OK, 3 rows affected (0.00 sec)
    Records: 3 Duplicates: 0 Warnings: 0

    当我买了2只猫后, 如果没学过触发器,应该把num的值减2;

     

    而利用触发器,则会使步骤变得智能

    mysql> delimiter $  # ‘$’分割符是为了与‘;’做出区别

    mysql> create trigger t1  #创建一个触发器
    -> after    # 在insert后触发
    -> insert   # 触发条件
    -> on ord   # 在哪个表建立触发条件
    -> for each row   
    -> begin    # 开始
    -> update goods set num = num - 2 where gid = 1  # 触发后改变的
    -> end$     # 结束
    Query OK, 0 rows affected (0.13 sec)

    在这个例子中,在每在ord中添加一条记录后,goods表的cat行num都会减2;但无论你在ord表内添加任何信息,goods表的cat行num只会减2

       优化只能减cat的num-2的问题

    触发器引用变量

    我们下ord表中,插入的一行叫做new,删除一行叫做old 

    如果直接添加会报如下的错误,因为在同一张表中还不支持建立相同触发条件的多个触发器

    删除trigger 

    建立更“智能”的trigger

    当建立好t2时,我们来测试一下

    建立一个t3,实现退货系统(不会t2冲突吗)

     修改订单数据

    当要购买的数量大于库存数时,就会出现问题

     

    说明必须在实现该条语句之前,就把数据改为 new.much = 最大的储存量;

     

     

  • 相关阅读:
    零售数据框架
    API安全Checklist
    高级区块链工程师评定
    软件项目复杂性
    e-Commerce电商参考云架构
    面试中的学习能力判断
    SpringCloud微服务架构案例-共享服务中心
    Software Architecture and High Level Design软件架构与概要设计
    基于Istio的ServiceMesh
    a store with that domain name already exists怎么解决
  • 原文地址:https://www.cnblogs.com/abc23/p/9438997.html
Copyright © 2020-2023  润新知