同一个sqlite数据库的不同连接可以同时开始事务吗?

use*_*404 7 sqlite transactions

我遇到了一个关于sqlite3的奇怪问题.我使用open()方法获得了相同数据库文件的不同连接.连接1开始一个事务,连接2开始另一个事务,即更新表的几个记录.然后连接1提交事务,然后连接2提交其事务.但我发现连接2的更新命令实际上永远不会更新数据库中的记录.在此过程中没有异常抛出.我不知道为什么会出现问题.任何人都可以向我解释原因吗?

rus*_*elf 14

如果您阅读SQLite文档,您将看到它支持多个连接以进行只读,您无法从多个连接写入数据库,因为它不是为此而设计的.

http://www.sqlite.org/faq.html#q5

  • 在COMMIT之前,事务不会修改数据库(就其他事务可以告诉的那样).因此,多个事务可以同时"执行写操作",但只有一个事务在COMMIT中成功.所有操作都在交易中; 它可能是隐含的. (2认同)
  • 您可以对数据库执行SELECT操作,而另一个事务正在执行写操作.SELECT将不会看到写入(除非您在读取未提交模式下使用共享缓存;请参阅http://www.sqlite.org/sharedcache.html). (2认同)

Dou*_*rie 5

除非您使用BEGIN IMMEDIATE来启动事务,否则您将面临必须回滚并重试它们的风险.BEGIN不做任何锁定; 后续UPDATE或INSERT获取锁定,您需要检查结果代码以查看它们是否失败.查看此页的交易,这一次的.