在同一个表上的Insert触发器中更新语句

时间:2012-09-12 07:19:39

标签: mysql sql triggers

我想在同一个表上编写一个包含UPDATE语句的触发器,如下所示:

create trigger AFTER INSERT ON myTable
   FOR EACH ROW BEGIN
    update myTable set ... where ...
   end

我该怎么做?

3 个答案:

答案 0 :(得分:1)

Quoting MySQL docs

  

触发器也可以影响其他表,但不允许   修改已经被使用(用于读取或写入)的表   调用函数或触发器的语句。

答案 1 :(得分:0)

您可以执行此操作(更新已触发插入后触发器的表)但是为了避免递归,FOR INSERT和FOR UPDATE触发器必须是单独的过程。另一个问题是Microsoft SQL Server仅对任何更新语句调用FOR UPDATE触发器一次。 SQL Server中没有FOR EACH ROW。在FOR INSERT TRIGGER中使用单个UPDATE ... table ... WHERE语句来同时更新很多行。

答案 2 :(得分:0)

我认为这是不可能的。

我在下面给出了一个表脚本

CREATE TABLE `tbl1` (
    `id` INT(10) NULL DEFAULT NULL,
    `msg` VARCHAR(50) NULL DEFAULT NULL
)

然后我使用以下查询

在该表上创建了触发器
delimiter |
create trigger trigger1 before insert on tbl1 for each row begin
update tbl1 set msg='insert occured in tbl1' where id=5;
end
|
delimiter ;

当我尝试运行以下查询

insert into tbl1 values (1,'ddd');

我收到了以下错误

“无法在存储的函数/触发器中更新表'tbl1',因为它已被调用此存储函数/触发器的语句使用”

所以它不可能。 欲了解更多信息,请访 http://bugs.mysql.com/bug.php?id=50684