在SQLite中,有没有一种方法可以定义我的触发器执行的顺序?

4
如果一个表有多个“on insert”触发器。我能指定在使用sqlite向表中插入值时首先执行哪个触发器吗?
我考虑合并我的触发器,但问题是每个触发器都有不同的“when”语句,如果我正确理解doc,那么“when”语句会在我的“update”/“insert”等语句之前执行。
CREATE TRIGGER trigger_name AFTER INSERT ON table_name
WHEN expr
BEGIN
    update-stmt;
END;

这听起来像是一个脆弱的设计。也许你应该考虑重构数据库设计。 - Tim
2个回答

1
将所有触发器合并为一个:
CREATE TRIGGER some_trigger
AFTER INSERT ON some_table
FOR EACH ROW BEGIN
    -- statement 1;
    -- statement 2;
    -- statement 3;
    ...
    -- statement n;
END;

6
如果有人想保持不同的时间表达方式怎么办? - Gaurav

0
如果触发器是执行更新操作,就像OP的示例一样,那么这并没有帮助。但是,如果每个触发器只是检查某些内容并可能引发错误,我认为这是一个非常普遍的情况,那么就可以将它们全部打包到单个触发器过程中(具有隐式执行顺序),并使用不同的表达式来处理每个触发器。
CREATE TRIGGER some_trigger
AFTER INSERT ON some_table
BEGIN
SELECT RAISE(FAIL, "error message one") WHERE (<select-statement-one>) == <value-one>;
SELECT RAISE(FAIL, "error message two") WHERE (<select-statement-two>) == <value-two>;
...
END;

(请记住,子查询表达式的值是封闭SELECT语句结果的第一行。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接