初学sqlite 锁协议

本文介绍了SQLite数据库的锁协议,包括Nolock、Shared、Reserved、Pending和Exclusive五种锁状态,以及读写事务的锁转换过程。讨论了为何需要Reserved状态以及在获得Reserved lock时为何不能释放Shared lock,旨在帮助初学者理解SQLite的并发控制和ACID特性。
摘要由CSDN通过智能技术生成

对Sqlite3的锁机制简单分析,本人新手,欢迎大家指正。

sqlite用五种锁实现ACID:


1. Nolock:应用处于初始状态

2. Shared:在读操作前获得的锁。(可以有多个应用共享Shared lock)

3. Reserved:表示应用将来有写的意图。(此时其他应用可以获得Shared lock)

4. Pending:表示应用正在因为要执行写操作而等全部Shared lock释放。(此时其他应用不能再获得任何锁)

5. Exclusive:表示应用已经获得锁并在执行写操作。(此时其他应用不能再获得任何锁)


[一次仅有读的事务具有以下锁转换过程]:

Nolock->Shared->Nolock

应用要启动事务读数据,那么首先要尝试获得shared lock,此时如果没有其他应用处于Pending或Exclusive,那么可以顺利完成读任务,并在提交以后释放锁,回到Nolock状态。


[一次有写的事务具有以下锁转换过程]:

Nolock->Shared->Reserved->Pending->Nolock

应用要启动事务写(读写)数据,那么首先要尝试获得shared lock,在获得shared lock以后,可以执行读操作。当应用调用写函数以后,并且还没有执行提交以前,会尝试获得Reserved lock,此时如果没有其他应用处于Reserved,Pending或Exclusive&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值