繁体   English   中英

在同一表上的插入触发器中的更新语句

[英]update statement in Insert trigger on the same table

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

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

我怎样才能做到这一点?

引用MySQL文档

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

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

我认为这是不可能的。

我创建一个表脚本如下

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM