zoukankan      html  css  js  c++  java
  • 13.Mysql触发器

    13.触发器
    13.1 创建触发器
    定义:触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。
    语法:
    create trigger 触发器名称 触发时机 触发事件 on 表名 for each row
    begin
    触发动作;
    end$$
    说明:
    触发时机分为before和after,表示触发器在DML语句之前还是之后触发。
    触发事件分为insert、update、delete,表示触发器被特定类型的DML语句(insert、update、delete)触发。
    触发动作是触发器所要执行的语句集合。
    伪记录OLD和NEW,用来表示变前行和变后行,只能在行级触发器内使用。
    触发事件函数inserting、updating、deleting,用来区分不同的触发事件以执行不同的触发动作。
    注意:
    mysql目前只支持行级触发器,暂不支持语句级触发器。
    mysql目前对同一个表相同的触发时机和触发事件下只能定义一个触发器。
    mysql目前不支持触发事件函数(inserting、updating、deleting),所以不同的触发事件需要单独建立触发器。
    对于插入或更新语句(insert into ... on duplicate key update ...),在新增重复数据时会触发before insert、before update、after update类型相关的触发器。
    例子:

    13.2 删除触发器
    语法:
    drop trigger schema.trigger_name;
    说明:
    一次可以删除一个触发器;
    schema未指定时默认为当前数据库。

    13.3 查看触发器
    查看全部触发器:
    show triggers;
    查看特定触发器:
    select * from information_schema.triggers where trigger_name='***';

    13.4 触发器的使用
    触发动作限制:
    触发程序不能调用将数据返回给客户端的存储程序(触发器里不能调用函数),
    也不能使用采用call语句的动态sql语句(不能使用动态sql),
    不能在触发器中使用以显式或隐式方式开始或结束事务的语句,如Start transaction、commit、rollback等(不能进行事务处理)。
    触发器允许存储程序通过参数将数据返回触发程序(可以调用存储过程)。
    触发顺序:before触发器--》DML语句--》after触发器。
    触发器对事务表进行操作时,整个操作作为一个事务,如果发生异常,操作将被全部回滚;
    触发器对非事务表进行操作时,整个操作不会作为一个事务,如果发生异常,操作将被中断,已更新的记录不进行回滚。

    13.5 小结
    不要将应用的处理逻辑过多的依赖于触发器来处理。

  • 相关阅读:
    【转】EDK简单使用流程(3)
    【转】应用 printf 语句格式化输出字符
    【转】[FPGA博客大赛](updated)在xilinx的FPGA系统中scanf函数的使用
    BZOJ 1083 [SCOI2005]繁忙的都市
    BZOJ 2821 分块统计
    BZOJ 1034 [ZJOI2008]泡泡堂BNB
    BZOJ 1029 [JSOI2007]建筑抢修
    BZOJ 1096 [ZJOI2007]仓库建设
    BZOJ 1070 [SCOI2007]修车
    BZOJ 1040 [ZJOI2008]骑士
  • 原文地址:https://www.cnblogs.com/BradMiller/p/9780194.html
Copyright © 2011-2022 走看看