我不理解SQLite 3.8.6中的触发器递归。
从我的理解设置PRAGMA recursive_triggers
到0
应该可以防止触发器触发另一个触发器。
但这是一个实际发生在我身上的例子:
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
触发器?
答案 0 :(得分:1)
这些触发器不是递归的。
如果触发器自身(直接或间接)触发,则触发器是递归的。
如果on_update_b
将执行UPDATE或INSERT,则会出现这种情况。