我正在尝试设置MySql触发器,以便在ODBC
中插入/更新数据后运行我的触发器如下:
CREATE TRIGGER `myTrigger`
AFTER INSERT ON `testTable` FOR EACH ROW UPDATE `testTable` SET `Field One` = CONCAT(`Field One`, ' - Trigger');
我的触发器语句在MySql工作台中运行,但是当我从Microsoft Access数据库连接到testTable
然后尝试插入一行时,我得到其中一行:
为了让事情变得更有趣,当我尝试运行以下内容时:
INSERT INTO `testTable` (`Field One`, `Field Two`, `Field Three`, `Field Four`, `Field Five`) VALUES ('x', 'xx', 'xxx', 'xxxx', 'xxxxx')
我收到以下错误:
错误1442:无法更新存储函数/触发器中的表'testtable',因为它已被调用此存储函数/触发器的语句使用。
工作台中Triggers
标签的完整触发器代码如下:
-- Trigger DDL Statements
DELIMITER $$
USE `FooBar`$$
CREATE
DEFINER=`JMK`@`%`
TRIGGER `myTrigger`
AFTER INSERT ON `testtable`
FOR EACH ROW
UPDATE `testTable` SET `Field One` = CONCAT(`Field One`, ' - Trigger')$$
我做错了什么?
由于
答案 0 :(得分:3)
即使添加触发器的查询在语法上是正确的并且已执行,但这并不意味着触发器函数有效。
您的触发器触发自身。这来自MySQL documentation:
- 存储函数不能递归使用。
- 在存储的函数或触发器中,不允许通过调用函数或触发器的语句修改已经使用(用于读取或写入)的表。