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模式和数据库同步

     

     

  • 相关阅读:
    机器学习之逻辑回归
    机器学习之线性回归与模型保存
    机器学习之决策树
    机器学习之贝叶斯算法
    机器学习之KNN算法
    算法基础与开发流程
    特征选择与特征降维
    特征预处理
    RSA加密算法和签名算法
    Java中使用OpenSSL生成的RSA公私钥
  • 原文地址:https://www.cnblogs.com/20120810bubu/p/3024080.html
Copyright © 2011-2022 走看看