MySQL触发器不支持的场景(不推荐使用)

本文探讨了如何在SQL Server中正确使用触发器,特别是DML触发器,避免因循环操作导致的错误,重点在于避免在同一张表中插入或更新数据时触发自身的更新。通过实例和错误案例,解析了触发器的工作原理及常见问题解决策略。
摘要由CSDN通过智能技术生成

触发器定义

触发器是一段能自动执行的程序,是一种特殊的存储过程, 触发器和普通的存储过程的区别是:触发器是当对某一个表进行操作时触发。 诸如: update、 insert、 delete 这些操作的时候,系统会自动调用执行该表上对应的触发器。 SQL Server 2005 中触发器可以分为两类: DML 触发器和DDL 触发器,其中 DDL 触发器它们会影响多种数据定义语言语句而激发,这些语句有 create、alter、 drop 语句。

建立触发器

#DELIMITER $
DROP TRIGGER IF EXISTS contract_info_update;
CREATE TRIGGER contract_info_update BEFORE INSERT ON xd_custfamilys FOR EACH ROW
BEGIN
DECLARE uuid VARCHAR(32) character set utf8;
DECLARE tel VARCHAR(500) character set utf8;
DECLARE nam VARCHAR(500) character set utf8;
DECLARE rela VARCHAR(32) character set utf8;
SET uuid = NEW.client_id;
SET nam = NEW.zy_other_name;
SET rela = NEW.zy_other_rela;
SET tel = NEW.zy_other_tel;
UPDATE xd_custfamilys SET other_tel = tel, other_name = nam, other_rela = rela WHERE client_id = uuid;
END #$
#DELIMITER ;

今天在使用触发器时,我是想在插入一条记录后更新改插入表中的某一条记录,触发器写好之后,当我插入一条数据时,

数据库报错:[Err] 1442 - Can’t update table ‘aa’ in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
翻译:无法更新存储函数/触发器中的表“ aa”,因为调用该存储函数/触发器的语句已使用该表。

本表触发器不能对本表进行insert,update,理由是可能会触发循环操作,例如写一个触发器 当更新本表的某条数据时更新本表的另一条数据,接着就会再一次触发事件,导致死循环。

所以应该避免在使用同一张表的触发器,修改同一张表的数据。

navicat建立触发器

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值