PRAGMA recursive_triggers不会禁用递归触发器

时间:2014-09-02 13:30:41

标签: sqlite

我不理解SQLite 3.8.6中的触发器递归。

从我的理解设置PRAGMA recursive_triggers0应该可以防止触发器触发另一个触发器。

但这是一个实际发生在我身上的例子:

sqlite> PRAGMA recursive_triggers;
0
sqlite> CREATE TABLE t1(a TEXT, b TEXT, c TEXT);
sqlite> CREATE TRIGGER on_insert AFTER INSERT ON t1
   ...> BEGIN
   ...>     UPDATE t1 SET b="c" WHERE rowid=NEW.rowid;
   ...> END;
sqlite> CREATE TRIGGER on_update_b AFTER UPDATE OF b ON t1
   ...> BEGIN
   ...>     SELECT RAISE(fail,"triggered update b!");
   ...> END;
sqlite> INSERT INTO t1 VALUES("a","b","c");
Error: triggered update b!

我可能误解了一些事情......

是否可以阻止触发on_update_b触发器?

1 个答案:

答案 0 :(得分:1)

这些触发器不是递归的。

如果触发器自身(直接或间接)触发,则触发器是递归的。 如果on_update_b将执行UPDATE或INSERT,则会出现这种情况。