sqlite中的锁及概念误区

本文详细介绍了SQLite数据库的锁机制,包括五种锁状态:UNLOCKED、SHARED、RESERVED、PENDING和EXCLUSIVE。重点阐述了读操作和写操作如何在不同锁状态下进行,以及如何处理并发。在读操作中,会获取共享锁并在完成后释放;在写操作中,通过获取排他锁以确保数据一致性,并在写入后释放。通过对SQLite锁的理解,可以更好地掌握其在并发环境下的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言


谈及sqlite,首先想到的必定是小巧便捷,尤其是嵌入式开发,相比较而言,对于sqlite的并发,大致都是这么说的(以下不代表个人观点)

     SQLite作为一款小型的嵌入式数据库,本身没有提供复杂的锁定机制,无法内部管理多路并发下的数据操作同步问题,更谈不上优化,
     所以涉及到多路并发的情况,需要外部进行读写锁控制,否则SQLite会返回SQLITE_BUSY错误,以驳回相关请求。


需要澄清一下,这种说法自身就有问题,就数据库而言,处理的并发实际上分为读并发,写并发,与读写并发,我们广义上说的并发实际上指的是读写并发,要了解这些,我们还需要先了解一下sqlite中的锁.


sqlite中的锁


sqlite中一共有五种锁分别是

        未加锁(UNLOCKED)

        文件没有持有任何锁,即当前数据库不存在任何读或写的操作。其它的进程可以在该数据库上执行任意的读写操作。此状态为缺省状态。

        共享锁(SHARED)

         在此状态下,该数据库可以被读取但是不能被写入。在同一时刻可以有任意数量的进程在同一个数据库上持有共享锁,因此读操作是并发的。换句话说,只要有一个或多个共享锁处于活动状态,就不再允许有数据库文件写入的操作存在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值