zoukankan      html  css  js  c++  java
  • MYSQL:基础——触发器

    MYSQL:基础——触发器引入触发器

    触发器

      如果你想要某条语句(或某些语句)在事件发生时自动执行。比如: 每当订购一个产品时,都从库存数量中减去订购的数量;无论何时删除一行,都在某个存档表中保留一个副本。就需要用到触发器。

      触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句(或位于BEGIN和END语句之间的一组语句):

    • DELETE;
    • INSERT;
    • UPDATE;

    说明:

      其他MySQL语句不支持触发器。只有表才支持触发器、视图不支持,临时表也不支持

    创建触发器

      触发器用CREATE TRIGGER 语句创建,一条伪代码如下

    CREATE
        [DEFINER = { user | CURRENT_USER }]
    TRIGGER trigger_name     //触发器名称
    trigger_time trigger_event  //触发时间  触发事件
    ON tbl_name FOR EACH ROW
      [trigger_order]
    trigger_body

     其中参数的可选项如下:

    • trigger_time: { BEFORE | AFTER }
    • trigger_event: { INSERT | UPDATE | DELETE }
    • trigger_order: { FOLLOWS | PRECEDES } other_trigger_name

     故创建一个触发器需要给出4条信息:

    1. 唯一的触发器名 
    2. 触发器关联的表 ON tb1_name
    3. 触发器应该响应的活动 DELETE、INSERT、UPDATE
    4. 触发器何时执行(AFTER、BEFORE) 

    删除触发器

    触发器不支持更新或者覆盖,为了修改一个触发器,必须先删除它,然后重新创建它。

    DROP TRIGGER newtype;

    使用触发器

    INSERT触发器

    INSERT触发器在INSERT语句执行之前或者之后执行,需要知道以下几点:

    1. 在INSERT触发器代码内,可引用一个名为NEW的虚拟表,访问被插入的行
    2. 在BEFORE INSERT触发器中,NEW中的值也可以被更新(允许更改被插入的值)。即,通过NEW来修改被插入的数据。
    3. 对于AUTO_INCRMENT列,NEW在INSERT执行之前包含0,在执行之后包含新的自动生成值。 

    实例:

      

    DELETE触发器

    说明:

    1. 在DELETE触发器代码内,你可以引用一个名为OLD的虚拟表,访问被删除的行。
    2. OLD表中的数据全是只读的,不能被修改。  

    实例:

      

    UPDATE触发器

    说明:

    1. 在UPDATE中,你可以使用OLD和NEW两张表。
    2. 在BEFORE UPDATE触发器中,NEW中的值可能也被更新(允许更改将要用于UPDATE语句中的值)
    3. OLD表中的值是只读的,不可以被更改。

    实例:

        

    实例

      我们创建一个触发器,当ms_sale发生修改操作后,修改ms_order表的数量。

    CREATE TRIGGER updateGoods
        AFTER UPDATE
        ON ms_sale
        for each row update ms_order SET or_number=or_number+(OLD.sale_number- NEW.sale_number) WHERE or_id= OLD.sale_or_id;
    

      

  • 相关阅读:
    todo--H2数据库
    todo--mybatis-generator-config....
    初次使用git配置以及git如何使用ssh密钥(将ssh密钥添加到github)
    Git 快速入门
    IOS IAP APP内支付 Java服务端代码
    In-App Purchase(iap)快速指南
    Spring MVC @ModelAttribute详解
    Spring MVC @SessionAttributes注解
    Spring MVC 向页面传值-Map、Model和ModelMap
    Spring MVC 向前台页面传值-ModelAndView
  • 原文地址:https://www.cnblogs.com/MrSaver/p/8012137.html
Copyright © 2011-2022 走看看