簡體   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