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

     

     

  • 相关阅读:
    python 全栈开发,Day67(Django简介)
    python 全栈开发,Day66(web应用,http协议简介,web框架)
    python 全栈开发,Day65(MySQL练习题,参考答案)
    python 全栈开发,Day65(索引)
    python 全栈开发,Day64(视图,触发器,函数,存储过程,事务)
    python 全栈开发,Day63(子查询,MySQl创建用户和授权,可视化工具Navicat的使用,pymysql模块的使用)
    *** 安全沙箱冲突 *** 到 127.0.0.1:9999 的连接已停止
    PosPal银豹收银系统
    m3u8文件简介
    flashbuilder发布release版本
  • 原文地址:https://www.cnblogs.com/20120810bubu/p/3024080.html
Copyright © 2011-2022 走看看