• 触发器


    使用触发器可以定制用户对表进行的【增,删,改】操作时前后的行为。注意:没有查询。

    创建触发器:

      插入前:

        create trigger tri_before_insert_tb1 before insert on tb1 for each row

        begin

          ...

        end

      插入后:

        create trigger tri_after_insert_tb1 after insert on tb1 for each row

        begin

          ...

        end

      

      删除前:

        create trigger tri_before_delete_tb1 before delete on tb1 for each row

        begin

          ...

        end

      删除后:

        create trigger tri_after_delete_tb1 before delete on tb1 for each row

        begin

          ...

        end

      更新前:

        create trigger tri_before_update_tb1 before update on tb1 for each row

        begin

          ...

        end

      更新后:

        create trigger tri_after_update_tb1 after update on tb1 for each row

        begin

          ...

        end

    例子:用户和日志表,每次创建一个用户后,就在日志表中生成这条记录。

    # 创建用户表
    create table user(
        id int primary key auto_increment,
        name varchar(20) not null,
        reg_time datetime, # 注册用户的时间
        affirm enum('yes','no') # no表示该用户执行失败
    );
    
    #创建日志表
    create table userLog(
        id int primary key auto_increment,
        u_name varchar(20) not null,
        u_reg_time datetime # 注册用户的时间
    );
    
    # 创建触发器 delimiter 默认情况下,delimiter是分号 触发器名称应遵循命名约定[trigger time]_[table name]_[trigger event]
    delimiter //
    create trigger after_user_insert after insert on user for each row
    begin
        if new.affirm = 'yes' then
            insert into userLog(u_name,u_reg_time) values(new.name,new.reg_time);
        end if;
    
    end //
    delimiter ;
    
    
    #往用户表中插入记录,触发触发器,根据if的条件决定是否插入数据
    insert into user(name,reg_time,affirm) values ('张三',now(),'yes'),('李四',now(),'yes'),('王五',now(),'no');
    
    
    # 查看日志表,发现多了两条记录 ,大家应该看到for each row就明白了
    
    mysql> select * from userlog;
    +----+--------+---------------------+
    | id | u_name | u_reg_time          |
    +----+--------+---------------------+
    |  1 | 张三   | 2018-06-14 17:52:49 |
    |  2 | 李四   | 2018-06-14 17:52:49 |
    +----+--------+---------------------+
    2 rows in set (0.00 sec)

    注意:在为insert定义的触发器中,仅可以使用new关键字,不能使用old关键字,但是在为delete定义的触发器中,没有新行,因此只能使用old关键字,在update触发器总,old是指更新前的行,new是指更新后的行。

    触发器无法由用户直接调用,是由于对表的【增,删,改】操作被动引发的。

    删除触发器:

    drop trigger 触发器名
  • 相关阅读:
    css重点章节复习—布局-边框-边距-浮动 (部分)
    (重点章节复习以及代码调整笔记)选择器:伪类和伪元素选择器(部分)
    css015 定位网页上的元素
    css014 响应式web设计
    3.MFC基础(三)消息映射
    2.MFC基础(二)窗口创建
    1.MFC基础(一)程序流程
    27.windows线程
    26.windows进程
    25.windows内存管理
  • 原文地址:https://www.cnblogs.com/stfei/p/9187693.html
Copyright © 2020-2023  润新知