0

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

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

我怎样才能做到这一点?

4

3 回答 3

1

引用 MySQL 文档

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

于 2012-09-12T07:23:46.230 回答
0

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

于 2012-09-12T07:29:25.027 回答
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

于 2012-09-12T07:50:56.770 回答