递归MySql触发器不工作

递归MySql触发器不工作,mysql,Mysql,我正在尝试设置MySql触发器,以便在ODBC中插入/更新数据后运行 我的触发器如下: CREATE TRIGGER `myTrigger` AFTER INSERT ON `testTable` FOR EACH ROW UPDATE `testTable` SET `Field One` = CONCAT(`Field One`, ' - Trigger'); -- Trigger DDL Statements DELIMITER $$ USE `FooBar`$$ CREATE DE

我正在尝试设置MySql触发器,以便在ODBC中插入/更新数据后运行

我的触发器如下:

CREATE TRIGGER `myTrigger`
AFTER INSERT ON `testTable` FOR EACH ROW UPDATE `testTable` SET `Field One` = CONCAT(`Field One`, ' - Trigger');
-- 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')$$
我的触发器语句在MySql workbench中运行正常,但当我从Microsoft Access数据库连接到
testTable
,然后尝试插入一行时,我会得到以下结果之一:

为了让事情变得更有趣,当我尝试运行以下程序时:

INSERT INTO `testTable` (`Field One`, `Field Two`, `Field Three`, `Field Four`, `Field Five`) VALUES ('x', 'xx', 'xxx', 'xxxx', 'xxxxx')
我得到以下错误:

错误1442:无法更新存储函数/触发器中的表“testtable”,因为调用此存储函数/触发器的语句已使用该表

工作台中我的
触发器
选项卡中的完整触发器代码如下:

CREATE TRIGGER `myTrigger`
AFTER INSERT ON `testTable` FOR EACH ROW UPDATE `testTable` SET `Field One` = CONCAT(`Field One`, ' - Trigger');
-- 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')$$
我做错了什么


谢谢

尽管添加触发器的查询在语法上是正确的,并且已执行,但这并不意味着触发器函数是有效的

你的触发器会自动触发。这是来自:

  • 存储的函数不能递归使用
  • 在存储的函数或触发器中,不允许修改调用函数或触发器的语句已在使用(用于读取或写入)的表

啊,那么我的更新触发器触发了一个更新,然后循环运行?@JMK,是的。这就是正在发生的事情。好的,有没有办法创建一个触发器,它在插入或更新后运行,但不会落入此陷阱?@JMK,通常,触发器用于更新不同的表。我将开始另一个问题,解释你正在尝试做什么,提供尽可能多的细节,并找出建议的解决方案。也许解决方案根本不是一个触发器。