递归MySql触发器无法正常工作

时间:2012-02-02 17:26:14

标签: mysql

我正在尝试设置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然后尝试插入一行时,我得到其中一行:

Access Error

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

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')$$

我做错了什么?

由于

1 个答案:

答案 0 :(得分:3)

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

您的触发器触发自身。这来自MySQL documentation

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