mysql触发器之创建简单触发器及限制

在MySQL中,触发器是一组SQL语句,当对相关联的表上的数据进行更改时,会自动调用该语句。 触发器可以被定义为在insert,update或delete语句更改数据之前或之后调用。在MySQL5.7.2版本之前,每个表最多可以定义六个触发器。我们来看下它们的简单介绍:

  • BEFORE INSERT - 在数据插入表之前被激活触发器。
  • AFTER INSERT - 在将数据插入表之后激活触发器。
  • BEFORE UPDATE - 在表中的数据更新之前激活触发器。
  • AFTER UPDATE - 在表中的数据更新之后激活触发器。
  • BEFORE DELETE - 在从表中删除数据之前激活触发器。
  • AFTER DELETE - 从表中删除数据之后激活触发器。

但是,从MySQL 5.7.2+版本开始,可以为相同的触发事件和动作时间定义多个触发器。当使用不使用INSERTDELETEUPDATE语句更改表中数据的语句时,不会调用与表关联的触发器。 例如,truncate语句删除表的所有数据,但不调用与该表相关联的触发器。但是,有些语句使用了后台的INSERT语句,如REPLACE语句或LOAD DATA语句。如果使用这些语句,则调用与表关联的相应触发器。所以我们必须要为与表相关联的每个触发器使用唯一的名称。可以为不同的表定义相同的触发器名称,这是一个很好的做法。我们来看下定义触发器的语法结构:

(BEFORE | AFTER)_tableName_(INSERT| UPDATE | DELETE)

例如,before_order_update是更新orders表中的行数据之前调用的触发器。我们再来看一种定义方式:

tablename_(BEFORE | AFTER)_(INSERT| UPDATE | DELETE)

例如,order_before_update与上述before_order_update触发器相同。

mysql会在在数据目录中存储触发器,例如:/data/luyaran/,并使用名为tablename.TRGtriggername.TRN的文件:

  • tablename.TRG文件将触发器映射到相应的表。
  • triggername.TRN文件包含触发器定义。

所以我们可以通过将触发器文件复制到备份文件夹来备份mysql触发器,还可以使用mysqldump工具备份触发器。

mysql触发器覆盖标准SQL中定义的所有功能,但是,在应用程序中使用它们也会有一些限制:

  • 使用在SHOWLOAD DATALOAD TABLE,BACKUP DATABASE,RESTOREFLUSHRETURN语句之上。
  • 使用隐式或明确提交或回滚的语句,如COMMITROLLBACKSTART TRANSACTION,LOCK/UNLOCK TABLES,ALTERCREATEDROP,RENAME等。
  • 使用准备语句,如PREPAREEXECUTE
  • 使用动态SQL语句。

好啦,本次记录就到这里了。

如果感觉不错的话,请多多点赞支持哦。。。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luyaran

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值