我可以从多个连接同时读取和写入SQLite数据库吗?
我有一个由两个进程使用的SQLite数据库。 我想知道,最新版本的SQLite,而一个进程(连接)启动一个事务写入数据库将另一个进程能够从数据库同时读取?
我从各种来源收集信息,主要来自sqlite.org,并把它们放在一起:
首先,默认情况下,多个进程可以同时打开相同的SQLite数据库,并且可以同时满足多个读取访问。
在写入的情况下,对数据库的单个写入会在短时间内locking数据库,即使是读取也不会有任何内容访问数据库文件。
从版本3.7.0开始,提供了一个新的“预先写入日志”(WAL)选项,可以同时读取和写入数据。
默认情况下,WAL未启用。 要打开WAL,请参阅SQLite文档。
SQLite3显式允许多个连接 :
(5)同一应用程序的多个应用程序或多个实例可以同时访问单个数据库文件吗?
多个进程可以同时打开同一个数据库。 多个进程可以同时做一个SELECT。 但是,只有一个进程可以随时对数据库进行更改。
为了共享连接,使用SQLite3共享caching :
从版本3.3.0开始,SQLite包含一个特殊的“共享caching”模式( 默认禁用 )
在版本3.5.0中,修改了共享高速caching模式,以便可以在整个进程中共享相同的高速caching,而不是在单个线程中共享。
5.0启用共享caching模式
共享caching模式是基于每个进程启用的。 使用C接口,可以使用以下API全局启用或禁用共享caching模式:
int sqlite3_enable_shared_cache(int);
每次调用sqlite3_enable_shared_cache()都会影响使用sqlite3_open(),sqlite3_open16()或sqlite3_open_v2()创build的后续数据库连接。 已经存在的数据库连接不受影响。 每次调用sqlite3_enable_shared_cache()都会覆盖同一个进程中的所有以前的调用。