• MySQL基础之使用触发器


    触发器

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

    • DELETE

    • INSERT

    • UPDATE

    其他MySQL语句不支持触发器

     

    创建触发器

    在创建触发器时, 需要给出4条信息

    • 唯一的触发器名

    • 触发器关联的表

    • 触发器应该响应的活动(DELETE、INSERT或UPDATE)

    • 触发器何时执行(处理之前或之后)

    触发器名必须在每个表中唯一, 但不是在每个数据库中唯一。这表示同一数据库中的两个表可具有相同的名字的触发器

    触发器用CREATE TRIGGER语句创建

    MariaDB [crashcourse]> CREATE TRIGGER newproduct AFTER INSERT ON products FOR EACH ROW SELECT 'Product added'

    此触发器将在INSERT语句成功执行后执行。这个触发器还指定FOR EACH ROW, 因此代码对每个插入行执行。在这个例子中, 文本Product added将对每个插入的行显示一次。

    只有表才支持触发器, 视图不支持(临时表也不支持)

    触发器按每个表每个事件每次的定义, 每个表每个事件每次只允许一个触发器。因此, 每个表最多只支持6个触发器(每条INSERT、UPDATE、DELETE之前和之后)。单一触发器不能与多个事件或多个表关联。

     

    删除触发器

    为了删除触发器, 可以使用DROP TRIGGER语句

    MariaDB [crashcourse]> DROP TRIGGER newproduct;

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

    使用触发器

    INSERT触发器

    INSERT触发器在INSERT语句执行之前或执行之后执行。

    • 在INSERT触发器代码内, 可引用一个名为NEW的虚拟表, 访问被插入的行
    • 在BEFORE INSERT触发器中, NEW中的值也可以被更新(允许更改插入的值)
    • 对于AUTO_INCREMENT列, NEW在INSERT执行之前包含0, 在INSERT执行之后包含新的自动生成的值
    MariaDB [crashcourse]> CREATE TRIGGER neworder AFTER INSERT ON orders FOR EACH ROW SELECT NEW.order_num;

    DELETE触发器

    DELETE触发器在DELETE语句执行之前或之后执行。

    • 在DELETE触发器代码中, 可以引用一个名为OLD的虚拟表, 访问被删除的行
    • OLD中的值全都是只读的, 不能更新
    MariaDB [crashcourse]> CREATE TRIGGER deleteorder BEFORE DELETE ON order FOR EACH ROW BEGIN INSERT INTO archive_orders(order_num, order_date, cust_id) VALUES(OLD.order_num, OLD.order_date, OLD.cust_id) END;

    使用BEFORE DELETE触发器的优点(相当于AFTER DELETE)在于, 如果由于某种原因, 订单不能存档, DELETE本身将被放弃

    UPDATE触发器

    UPDATE触发器在UPDATE语句执行之前或之后执行

    • 在UPDATE触发器中, 可以引用一个名为OLD的虚拟表访问以前(UPDATE之前)的值, 引用一个名为NEW的虚拟表访问新更新的值
    • 在BEFORE UPDATE触发器中, NEW中的值可能也被更新(允许更改将要用与UPDATE语句中的值)
    • OLD中的值全都是只读的, 不能更新
    MariaDB [crashcourse]> CREATE TRIGGER updatevendor BEFORE UPDATE ON vendors FOR EACH ROW SET NEW.vend_state=Upper(NEW.vend_state)

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    组合数据类型练习,英文词频统计实例
    条件、循环、函数定义等练习
    大数据应用实例
    实验二-模拟在CPU中的优先级调度
    实验二——模拟在CPU中的进程调度(改稿)
    实验二——模拟在CPU中的进程调度(初稿)
    回答前文问题
    13.14.15.16.17&《一个程序猿的生命周期》读后感
    10,11,12读书有感
    读书三章8,9,10
  • 原文地址:https://www.cnblogs.com/featherwit/p/13437002.html
Copyright © 2020-2023  润新知