当前位置:  开发笔记 > 后端 > 正文

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

如何解决《同一个sqlite数据库的不同连接可以同时开始事务吗?》经验,为你挑选了2个好方法。

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



1> rustyshelf..:

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

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


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

2> Doug Currie..:

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

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