只是想知道如果包含在回滚的事务中,是否可以撤消诸如foreign_keys = OFF和VACUUM之类的编译指示。
在线文档似乎没有涵盖这个......
答案 0 :(得分:6)
不同的pragma语句不同。
例如,SQLite版本3.7.15.2在事务中包含pragma'user_version',并且将COMMIT和ROLLBACK值。
但是,相同版本的SQLite明确地排除了(在文档和测试中)来自事务的foreign_keys。
从我的有限采样中看来,在事务处理期间未记录为无效的编译指示(foreign_key)将参与该事务(如user_version。)
PS:我意识到这是一个非常古老的问题,但是当我需要这些信息时谷歌就把它带到了我的身边。答案 1 :(得分:1)
该文档未涵盖在一般事务中发布的pragma语句会发生什么,但它确实涵盖了foreign_keys(以及可能对其他人)的主题:
此pragma是交易中的无操作;外键约束 只有在没有待处理时才可以启用或禁用强制执行 开始或SAVEPOINT。
VACUUM不是一个编译指示,而documentation确实涵盖了交易:
如果存在打开的交易,或者存在交易,则VACUUM将失败 运行时的一个或多个活动SQL语句。
答案 2 :(得分:0)
我可以验证至少以下PRAGMA在交易中无效:
PRAGMA journal_mode=WAL;
如果尝试这样做,您将收到以下错误消息:
SQL逻辑错误:无法从事务内更改为wal模式