zoukankan      html  css  js  c++  java
  • Mysql 之Trigger基本语法

    mysql5新添加的功能。

    1 创建基本语法:

    create trigger trigger_name trigger_time trigger_event

    on table_name for each row trigger_stmt

    trigger_name:自行定义触发器名字;

    trigger_time:标识触发时机,before 或 after;

    trigger_event:标识触发事件,insert,update 或 delete;

    table_name:标识建立触发器的表名;

    trigger_stmt:触发器程序体,可用begin和end作为开始和结束。

    2 实例(a copy)

    CREATE /*!50017 DEFINER = 'root'@'localhost' */ TRIGGER trig_useracct_update
    AFTER UPDATE
    ON SF_User.useracct FOR EACH ROW
    BEGIN
    IF OLD.ulevelid = 10101 OR OLD.ulevelid = 10104 THEN
    IF NEW.ulevelid = 10101 OR NEW.ulevelid = 10104 THEN
    if NEW.ustatid != OLD.ustatid OR NEW.exbudget != OLD.exbudget THEN
    INSERT into FC_Output.fcevent set type = 2, tabid = 1, level = 1, userid = NEW.userid, ustatid = NEW.ustatid, exbudget = NEW.exbudget;
    end if;
    ELSE
    INSERT into FC_Output.fcevent set type = 1, tabid = 1, level = 1, userid = NEW.userid, ustatid = NEW.ustatid, exbudget = NEW.exbudget;
    END IF;
    END IF;
    END;

    关键字old/new:表示修改前和修改后的列值。old列只读,new列可在触发器程序中再次赋值。

    注意:begin和end之间通常使用顺序、判断和循环等语句,用来实现一般程序需要的逻辑功能。如果是简单的 insert/update/delete语句,就不需要 begin和end了。

    3 查看触发器的 基本语法

    show triggers from database_name like "usermaps%"      //查看数据库中名字和usermaps匹配的触发器

    或者

    show triggers        //查看所有的触发器,适用于不了解触发器信息并且触发器不多的情况下

    另外,mysql中有一个information_schema.TRIGGERS表,存储所有库中的触发器

    desc  information_schema.TRIGGERS   //查看。然后通过触发器的不同属性进行查询。

    select * from information_schema. TRIGGERS where TRIGGER_NAME= 'trig_useracct_update'\G;

    4 删除触发器

    drop trigger [schema_name.]trigger_name

     


    5 触发的类型

    before/after * insert/update/delete=6

    在一个表上最多建6个触发器。

    另外注意,mysql定义的load data和replace语句也会引起上述触发器的触发。

    load data语句用于将一个文件装入到一个数据表中,相当于一系列insert操作;replace=delete语句(删除与插入数据相同索引的数据)+insert语句

    也就是:

    Insert型触发器:可能通过insert语句,load data语句,replace语句触发;

    Update型触发器:通过update语句触发;

    Delete型触发器:可能通过delete语句,replace语句触发。

    6 更多(有待实践)

    1) mysql的引擎室innoDB,由此建立的表都是事务性表。对于事务性表,如果触发程序失败(以及由此导致的整个语句的失败),该语句所执行的所有更改将 回滚。那么,

    如果before触发器执行失败,sql也会执行失败

    如果sql在执行失败时,after型触发器不会执行

    如果after触发器执行失败,sql会回滚

    2) mysql触发器程序执行的顺序

    3) mysql的bin-log模式和数据库同步

     

     

  • 相关阅读:
    springboot springcloud zuul 过滤器
    springboot springcloud eureka 熔断器
    javaweb servlet filter
    maven nexus 搭建私服(二)
    springboot springcloud zuul 网关入门
    springboot springcloud 配置中心
    springboot springcloud eureka 入门
    java rabbitmq
    java jvm调优
    maven nexus 搭建私服(一)
  • 原文地址:https://www.cnblogs.com/20120810bubu/p/3024080.html
Copyright © 2011-2022 走看看