MySQL 触发器

触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合

创建触发器

创建触发器的语法如下:

create trigger trigger_name
trigger_time trigger_event on tbl_name 
FOR EACH ROW 
trigger_stmt

注意:触发器只能创建在永久表(Permanent Table)上,不能对临时表(Temporary Table)创建触发器

其中 trigger_time 是触发器的触发时间,可以是 before 或者 after,before 的含义指在检查约束前触发,而 after 是在检查约束后触发

trigger_event 就是触发器的触发事件,可以是 insert,update 或者 delete

对同一个表相同触发时间的相同触发事件,只能定义一个触发器

使用别名 oldnew 来引用触发器中发生变化的记录内容

删除触发器

一次可以删除一个触发程序,如果没有指定 schema_name,默认为当前数据库,具体语法如下:

drop trigger [schema_name.]trigger_name

查看触发器

可以通过执行 show triggers 命令查看触发器的状态,语法等信息

另外一个查看方式是查询系统表的 information_schema.triggers

触发器的使用

触发器执行的语句有以下两个限制

  • 触发程序不能调用将数据返回客户端的存储程序,也不能使用采用 call 语句的动态 SQL语句,但是允许存储程序通过参数将数据返回触发程序。也就是存储过程或者函数通过 out 或者 inout 类型的参数将数据返回触发器是可以的,但是不能调用直接返回数据的过程
  • 不能在触发器中使用以显式或隐式方式开始或结束事务的语句,如 start transaction,commit 或 rollback

MySQL 的触发器是按照 before 触发器,行操作,after 触发器的顺序执行的,其中任何一步操作发生错误都不会继续执行剩下的操作。如果是对事务表进行的操作,那么会整个作为一个事务被回滚(Rollback),但是如果是对非事务表进行的操作,那么已经更新的记录将无法回滚,这也是设计触发器的时候需要注意的问题

你可能感兴趣的:(MySQL 触发器)