触发器定义
触发器是一段能自动执行的程序,是一种特殊的存储过程, 触发器和普通的存储过程的区别是:触发器是当对某一个表进行操作时触发。 诸如: 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,理由是可能会触发循环操作,例如写一个触发器 当更新本表的某条数据时更新本表的另一条数据,接着就会再一次触发事件,导致死循环。
所以应该避免在使用同一张表的触发器,修改同一张表的数据。