• MySQL触发器


    引入

    对某个表进行【增/删/改】操作的前后如果希望触发某个特定的行为时,可以使用触发器,触发器用于定制用户对表的行进行【增/删/改】前后的行为。

    具体分析

    语法:

    CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON tb1 FOR EACH ROW
    BEGIN
    ...
    END

    分析:

    CREATE:创建。
    TRIGGER:触发器,后面跟的是触发器的名字。
    BEFORE:表示插入位置,在前面。
    INSERT:触发器的触发的时机,如:上面代码表示;在tb1的数据插入之前创建触发器。
    ON:绑定被插入的对象,后面接被操作的对象。
    FOR EACH ROW:固定格式,表示后面每行都如下操作。

    案例:

    数据表对应的信息

    part表:

    1481388094096

    login表:

    1481388132055

    创建触发器代码:

    delimiter $$
    create trigger tri_before_inster_part before insert on part for each ROW
    BEGIN
    insert into login(name) values("xxx");
    end $$
    delimiter ;
    代码

    分析:
    上面代码表示,在psrt插入数据的时候,执行begin和end中的代码,往login表中添加数据。

    执行往part中加入数据代码:

    delimiter $$
    create trigger tri_before_inster_part before insert on part for each ROW
    BEGIN
    insert into login(name) values("xxx");
    end $$
    delimiter ;
    
    insert into part(caption) values("ss");
    代码

    结果:

    login表:

    1481388762534

    part表:

    1481388790242

    扩展:
    代码的执行,可以先将触发器创建后,在单独的执行,然后可以将创建触发器的代码隐藏,单独执行操作代码。

    触发器特殊值

    • old
    • new

    new

    新插入的数据,这数据是操作之前没有的,新增的。

    前面代码的执行,都是我们直接传入的,但是如果我想将我插入part表的数据,也同样插入到login中。

    代码:

    delimiter $$
    DROP trigger if EXISTS tri_before_inster_part $$
    create trigger tri_before_inster_part before insert on part for each ROW
    BEGIN
      insert into login(name) values(new.caption);
    end $$
    delimiter ;
    
    insert into part(caption) values("ss");
    代码

    结果:

    part表:

    1481389719055

    login表:

    1481389748977

    分析:
    两个表最后增加的数据是一样的。

    old

    表示在触发器操作前存在的数据,这变化的时候,可以获取。

    需求:我想在part的数据删除前,将part的所删除的数据增加到login中。

    代码:

    delimiter $$
    DROP trigger if EXISTS tri_before_delete_part $$
    create trigger tri_before_delete_part before delete on part for each ROW
    BEGIN
      insert into login(name) values(old.caption);
    end $$
    delimiter ;
    
    DELETE FROM part where nid = 7;
    代码

    结果:
    part表:删掉了 y

    1481390653251

    login表:增加 y

    1481390682770

    扩展:
    既然是存在新旧数据的获取,那么更新的时候,有新数据也有旧数据,则,这两个特殊方法,都能获取对应的。

  • 相关阅读:
    在人生路上对我影响最大的三位老师
    秋季学期学习总结
    转载非原创 Windows编程革命简史
    转载 关于12360系统的讨论
    SQLServer 触发器
    sqlserver 自定义函数
    jQuery 动画
    jQuery让页面生动起来(操作页面里面的元素)
    jQuery选择元素
    SqlServer_Case_When用法
  • 原文地址:https://www.cnblogs.com/jayafs/p/6181004.html
Copyright © 2020-2023  润新知