我想在同一个表上编写一个包含UPDATE语句的触发器,如下所示:
create trigger AFTER INSERT ON myTable
FOR EACH ROW BEGIN
update myTable set ... where ...
end
我该怎么做?
答案 0 :(得分:1)
触发器也可以影响其他表,但不允许 修改已经被使用(用于读取或写入)的表 调用函数或触发器的语句。
答案 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