MySQL 触发器(十一)

MySQL 触发器

  • MySQL 的触发器和存储过程一样,都是嵌入到 MySQL 的一段程序。触发器由事件来触发某个操作,这些事件包括 INSERTUPDATEDELETE 语句。

创建触发器

  • 触发器(trigger)是一个特殊的存储过程,不同的是,执行存储过程要使用 CALL 语句来调用,而触发器的执行不需要使用 CALL 语句调用,也不需要手动启动,只要当一个预定义的事件发生的时候,就会被 MySQL 自动调用。

创建只有一个执行语句的触发器

  • 创建一个触发器的语法如下:

    CREATE TRIGGER trigger_name trigger_time trigger_event
    ON tb1_name FOR EACH ROW trigger_stmt;
    

    其中,trigger_name 标识触发器的名称,用户自行指定;

    trigger_time 标识触发时机,可以指定为 BEFOREAFTER

    trigger_event 标识触发事件,包括 INSERTUPDATEDELETE

    tb1_name 标识建立触发器的表名,既在哪个表上建立触发器;

    trigger_stmt 是触发器执行语句。

创建有多个执行语句的触发器

  • 创建多个执行语句的触发器的语法如下:

    CREATE TRIGGER trigger_name trigger_time trigger_event
    	ON tb1_name FOR EACH ROW
    	BEGIN
    		语句执行列表
    	END;
    

    触发器程序可以使用 BEGINEND 作为开始和结束,中间包含多个语句。

查看触发器

  • 可以通过两种方法来查看已经创建的触发器,分别是 SHOW TRIGGERS 和在 triggers 表中查看触发器信息。

SHOW TRIGGERS 语句查看触发器信息

  • 通过 SHOW TRIGGERS 查看触发器的语句如下:

    SHOW TRIGGERS;
    

在 triggers 表中查看触发器信息

  • 在 MySQL 中所有触发器的定义都存在 INFORMATION_SCHEMA 数据库的 TRIGGERS 表格中,可以通过查询命令 SELECT 来查看,具体语法如下:

    SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE condition;
    

    TRIGGER_SCHEMA 表示触发器所在的数据库;EVENT_OBJECT_TABLE 表示在哪个数据表上触发;ACTION_ORIENTATIONROW,表示在每条记录上都触发。

使用触发器

  • 触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。

删除触发器

  • 使用 DROP TRIGGER 语句可以删除 MySQL 中已经定义的触发器,删除触发器语句基本语法格式如下:

    DROP TRIGGER [schema_name.]trigger_name;
    

注意事项

  1. 在使用触发器的时候,对于相同的表,相同事件只能创建一个触发器。
  2. 如果需求发生变化,而触发器没有进行相应的改变或者删除,则触发器仍然会执行旧的语句,从而影响新的数据的完整性。因此,要将不再使用的触发器及时删除。

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...