我可以从多个连接同时读写SQLite数据库吗?

时间:2012-04-26 00:25:40

标签: sqlite

我有一个由两个进程使用的SQLite数据库。我想知道,使用最新版本的SQLite,当一个进程(连接)启动一个事务来写入数据库时​​,另一个进程是否能够同时从数据库中读取?

2 个答案:

答案 0 :(得分:106)

我从各种来源收集信息,主要来自sqlite.org,并将它们放在一起:

首先,默认情况下,多个进程可以同时打开相同的SQLite数据库,并且可以并行满足多个读取访问。

在写入的情况下,对数据库的单次写入会将数据库锁定一小段时间,甚至读取都不能访问数据库文件。

从版本3.7.0开始,可以使用新的“Write Ahead Logging” (WAL)选项,其中读取和写入可以同时进行。

默认情况下,WAL未启用。要打开WAL,请参阅SQLite文档。

答案 1 :(得分:15)

SQLite3明确允许multiple connections

  

(5)可以多个应用程序或多个实例相同   应用程序同时访问单个数据库文件?

     

多个进程可以同时打开同一个数据库。   多个进程可以同时执行SELECT。但是只有   一个进程可以随时对数据库进行更改   然而,时间。

要共享连接,请使用SQLite3 shared cache

  

从版本3.3.0开始,SQLite包含一个特殊的“共享缓存”   模式(默认情况下禁用

     

在3.5.0版中,共享缓存模式被修改为相同   缓存可以在整个进程中共享,而不仅仅是在一个进程内共享   单线程。

     

5.0启用共享缓存模式

     

基于每个进程启用共享缓存模式。使用C.   接口,以下API可用于全局启用或禁用   共享缓存模式:

     

int sqlite3_enable_shared_cache(int);

     

每次调用sqlite3_enable_shared_cache()都会影响后续数据库   使用sqlite3_open(),sqlite3_open16()或创建的连接   sqlite3_open_v2()。已存在的数据库连接是   不受影响。每次调用sqlite3_enable_shared_cache()都会覆盖所有   在同一过程中的先前电话。