mysql数据库复习之(六)--触发器

触发器(trigger)是由事件触发某个操作,事件包括INSERT语句、UPDATE语句和DELETE语句。当数据库系统执行这些事件时就会激活触发器执行相应的操作。

为什么使用触发器

再具体开发项目时,会遇见如下实例:

  • 新员工入职,添加一条该员工相关的记录,员工的总数就必须同时改变。
  • 学生毕业后,学校删除该学生的记录,同时也希望能删除该同学的借书记录。

在上述情况中,当一个表的数据发生改变时,希望能够自动做一些处理操作。这些自动做的一些处理操作就是通过触发器来实现的。

只有delete、insert和 update会激发触发器;触发器能够加强数据库表中数据的完整性约束和业务规则等。

如何使用触发器

触发器是特殊的存储过程,只不过触发器是由一个预定义的事件的发生来激活。

  • 一条执行语句的触发器

    create trigger trigger_name before | after trigger_event
    	on table_name for each row trigger_stmt
    # before | after :指定触发器执行的时间
    # trigger_event:表示触发时间,包括update、insert和delete语句
    # table_name:触发事件的操作表名
    # for each row:任何一条记录上的操作满足触发事件都会触发该触发器
    # trigger_stmt: 激活触发器后被执行的语句
    

    例:在数据库company中存在两个表:部门表t_dept和日志表t_logger,创建触发器实现向部门表中插入记录时,就会在插入之前向日志表中插入当前时间:

    CREATE TRIGGER tri_loggertime
    	BEFORE INSERT ON t_dept FOR EACH ROW
    		INSERT INTO t_logger VALUES (NULL,'t_dept',now());
    
  • 多条执行语句的触发器

    delimiter $$
    create trigger trigger_name before | after trigger_event
    	on table_name for each row
    		BEGIN
    		trigger_stmt
    		END;
            $$
     delimiter ;
    # before | after :指定触发器执行的时间
    # trigger_event:表示触发时间,包括update、insert和delete语句
    # table_name:触发事件的操作表名
    # for each row:任何一条记录上的操作满足触发事件都会触发该触发器
    # trigger_stmt: 激活触发器后被执行的语句
    

查看触发器

  1. show triggers\G
  2. select * from information_schema.triggers;

删除触发器

drop trigger trigger_name;

注: 本文参考《Mysql 5.7 从入门到实践》张婷 一书。

你可能感兴趣的:(MySQL数据库,触发器)