如何处理SQLite缺少的功能:disable triggers
?
我没有存储特定表的触发器名称.
例如,我如何删除所有触发器?
你会怎么做?
我写了一个非常简单的扩展函数来将布尔值设置为true或false.
以及一个检索此值的函数(GetAllTriggersOn()).
使用此功能,我可以定义所有触发器,如:
CREATE TRIGGER tr_table1_update AFTER UPDATE ON TABLE1 WHEN GetAllTriggersOn() BEGIN -- ... END
SQLite将架构(元)信息存储在内置sqlite_master
表中.
要获取可用触发器列表,请使用以下查询:
SELECT name FROM sqlite_master WHERE type = 'trigger' -- AND tbl_name = 'a_table_name'
所以这是2015年,SQLite中仍然没有"禁用触发器".对于移动应用程序,这可能会有问题 - 特别是如果它是需要离线功能和本地数据的企业应用程序.
即使您未在单个事务中包装每个插入,也可以通过触发器执行来减慢初始数据加载以进行爬网.
我很简单地使用SQLite SQL解决了这个问题.我有一个不参与init加载的设置表.它包含键/值对的"列表".我有一个名为'fireTrigger'的键,其位值为0或1.每个触发器都有一个选择值的表达式,如果它等于1则触发触发器,否则它不会触发.
此表达式是对与触发器相关的数据计算的任何表达式的补充.例如:
AND 1 = (SELECT val FROM MTSSettings WHERE key = 'fireTrigger')
在简单的清洁效果中,这允许我UPDATE
通过设置表的简单来禁用/启用触发器