我想在同一张表上编写一个包含 UPDATE 语句的触发器,如下所示:
create trigger AFTER INSERT ON myTable
FOR EACH ROW BEGIN
update myTable set ... where ...
end
我怎样才能做到这一点?
触发器也可以影响其他表,但不允许修改已被调用函数或触发器的语句使用(用于读取或写入)的表。
您可以这样做(更新已触发后插入触发器的表)但为避免递归,您的 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