当前位置:  开发笔记 > 数据库 > 正文

如何处理SQLite的缺失功能:禁用触发器?

如何解决《如何处理SQLite的缺失功能:禁用触发器?》经验,为你挑选了3个好方法。

如何处理SQLite缺少的功能:disable triggers

我没有存储特定表的触发器名称.

例如,我如何删除所有触发器?
你会怎么做?



1> ralf.w...:

我写了一个非常简单的扩展函数来将布尔值设置为true或false.

以及一个检索此值的函数(GetAllTriggersOn()).

使用此功能,我可以定义所有触发器,如:

CREATE TRIGGER tr_table1_update AFTER UPDATE ON TABLE1 WHEN GetAllTriggersOn()
BEGIN
    -- ...
END



2> Nick Dandoul..:

SQLite将架构(元)信息存储在内置sqlite_master表中.

要获取可用触发器列表,请使用以下查询:

SELECT name FROM sqlite_master
WHERE type = 'trigger' -- AND tbl_name = 'a_table_name'



3> 小智..:

所以这是2015年,SQLite中仍然没有"禁用触发器".对于移动应用程序,这可能会有问题 - 特别是如果它是需要离线功能和本地数据的企业应用程序.

即使您未在单个事务中包装每个插入,也可以通过触发器执行来减慢初始数据加载以进行爬网.

我很简单地使用SQLite SQL解决了这个问题.我有一个不参与init加载的设置表.它包含键/值对的"列表".我有一个名为'fireTrigger'的键,其位值为0或1.每个触发器都有一个选择值的表达式,如果它等于1则触发触发器,否则它不会触发.

此表达式是对与触发器相关的数据计算的任何表达式的补充.例如:

AND 1 = (SELECT val FROM MTSSettings WHERE key = 'fireTrigger')

在简单的清洁效果中,这允许我UPDATE通过设置表的简单来禁用/启用触发器

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有