2012-06-25 40 views
0

我有兩個SQLite3表,A和B.當列A.X更新時,我想修改B.Y,並且當B.Y更新時,我想修改A.X.如何輕鬆檢測sqlite3中的觸發深度?

我可以用兩個觸發器:

CREATE TRIGGER AtoB AFTER UPDATE OF X ON A BEGIN UPDATE B SET Y = ... 

CREATE TRIGGER BtoA AFTER UPDATE OF Y ON B BEGIN UPDATE A SET X = ... 

但似乎這兩個觸發器調用一次,無論我修改的表,即人們總是調用其他。

我只希望其中的一個執行,因爲更新在A到B的方向上是有損的。我不想在B的反方向上損失A,但是如果兩個觸發器都觸發,那麼它會使它在兩個方向都是有損的。

一個簡單的解決方案是實現三個UDF「increment_trigger_depth」,「decrement_trigger_depth」和「get_trigger_depth」,然後在更新語句中使用「WHEN trigger_depth == 1」。但是,是否有更簡單的方法來確定SQLite3中的觸發深度?

+0

聽起來像...一個過於複雜的觸發設置: - / – 2012-06-26 00:11:21

回答

1

使用新表來保存觸發深度。

CREATE TABLE trigger_depth (depth); 
INSERT INTO trigger_depth VALUES (0); 

那麼對於increment_trigger_depth使用

UPDATE trigger_depth SET depth = depth + 1; 

使用

... WHEN (SELECT depth FROM trigger_depth) <= 0 BEGIN ... 

來保護您的觸發動作

相關問題