MySQL触发器 Update触发Insert失败
今天工作需要,想要实现将仅对状态更新的表进行历史记录显示,于是考虑在原表中建立触发器,将更新的内容同时写入另一张表
于是进行测试
--建立测试表CREATETABLE`triggletest_triggle`( `id`INT(11)NOTNULL, `name`VARCHAR(5)NULLDEFAULTNULL, PRIMARYKEY(`id`) ) COLLATE='latin1_swedish_ci' ENGINE=InnoDB --建立目标表 CREATETABLE`triggletest`( `seq`INT(11)NOTNULL, `id`INT(11)NOTNULL, `name`VARCHAR(5)NULLDEFAULTNULL, PRIMARYKEY(`seq`), INDEX`id`(`id`) ) COLLATE='latin1_swedish_ci' ENGINE=InnoDB; ---写入测试数据 INSERTINTO`triggletest_triggle`VALUES(1,'A'); --建立触发器 DROPTRIGGERifEXISTStest1 CREATETRIGGERtest1 AFTERUPDATEONtriggletest_triggle FOREACHROW BEGIN INSERTINTOtriggletest(id)values(new.id); END
执行触发器语句,报错,报错内容如下:
/*SQL错误(1064):YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'CREATETRIGGERtest1 AFTERUPDATEONtriggletest_triggle FOREACHROW BEGIN'atline2*/ ---最终实现代码 DROPTRIGGERifEXISTStest1; CREATETRIGGERtest1AFTERUPDATEONtest.triggletest_triggleFOREACHROW BEGIN INSERTINTOtriggletest(id,name)values(new.id,new.name); END;
分析,由于访问工具HediSQL,导致无法正常创建触发器,相同语句,在HediSQL中执行,报错,使用shell调用mysql,直接执行程序,成功。