MySQL触发器使用心得(解决表间循环触发问题)

本文探讨了MySQL触发器的优缺点,强调了行触发可能导致的性能问题。通过实例展示了如何创建触发器,并指出在特定情况下可能会引发表间循环触发的错误。通过IF...ELSE语句,解决了字段粒度的触发器问题,防止了循环触发,确保了数据库操作的正确性。
摘要由CSDN通过智能技术生成

触发器简介

  • 什么是触发器
    触发器这个名字实际上起的非常生动了,就是指的在数据库系统中发生某一个动作(比如增删改都是可选的动作)时自动触发预先设置好的另外一个动作,包括但不限于基本的增删改,再配合IF ELSE语句可以实现很多非常强大的功能。
  • 触发器的优点
    触发器的优点在于,可以使用简单的配置来实现复杂的功能,这些功能如果想要在应用层面去实现往往需要比较多的代码量。
  • 触发器的缺点
  1. 触发器有一个显而易见的缺点,尤其是在MySQL中,由于MySQL仅支持行触发模式,假如数据库系统中现在有一条触发器的功能是:当前表有新数据插入时,将数据同时插入另外一张表,此时,如果我们使用INSERT语句一次性向当前表中插入一千条数据(使用类似于INSERT INTO cur_table(id,name) VALUES(1,’周一‘) (2,'周二')....(1000,'周一千')的批量插入语句),由于行触发的缘故,我们设定的插入触发器将会被触发1000次,这将带来严重的性能问题! 因此,在对性能有要求的场景下不要使用触发器,如果一定要使用,务必保证触发器中的语句的开销不会很大,并且不会被频繁触发!
  2. 触发器还有一个缺陷,就是会将业务和数据库捆绑在一起,使得系统的耦合度变高,当业务需求有变更时,系统可能变得难以维护。因此,在业务需求不稳定或者维护人员频繁变动的场景下尽量不要使用触发器。

MySQL中触发器的创建

先给一个示例
假设数据库中有两张表,分别为table1table2,两张表结构一致,都是有两个名为col1col2的字段,如下

col1 col2

table1中创建一个触发器(SQL语句)

CREATE TRIGGER `insert_into_table2_too` AFTER INSERT ON `table1`
FOR EACH ROW 
BEGIN
	INSERT INTO `table2` (`col1`
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值