簡體   English   中英

觸發器創建期間的SQL語法錯誤:何時與何處

[英]SQL Syntax error during Trigger creation: when vs. where

為什么下面的第一個查詢在Firefox SQLite管理器中起作用,而第二個查詢卻不起作用? 為什么使用SQLite,MySQL,PostGreSQL等在SQL Fiddle中都失敗了?

create trigger symmetric_insertion
after insert on T
for each row
when not exists (select * from T where T.A = New.B and T.B = New.A)
begin
  insert into T values (New.B, New.A);
end;

create trigger symmetric_insertion
after insert on T
for each row
begin
  insert into T values (New.B, New.A)
  where not exists (select * from T where T.A = New.B and T.B = New.A);
end;

編輯 :將不會創建無限循環,因為我還沒有將recursive_triggers設置設為true。 此外,MySQL僅允許有限的遞歸深度。

不知道為什么第一個觸發器在Firefox SQLite Manager中起作用。 如果觸發器導致表插入到表中,則觸發器應該失敗,並且最好是在不編譯時。 我猜這可能是因為Firefox SQLite如何使用when子句編寫其DBMS,該子句允許觸發器進行編譯。 第二種是非法的SQL。 當它執行時,它每次都會插入一次,然后級聯,因此您不允許這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM