MST
星途 面试题库

面试题:SQLite锁机制的基本原理是什么

请阐述SQLite中不同类型锁(如SHARED锁、RESERVED锁、EXCLUSIVE锁等)的作用及获取和释放的时机,以及它们是如何保证数据库并发访问的一致性的。
32.4万 热度难度
数据库SQLite

知识考点

AI 面试

面试题答案

一键面试

SHARED锁

  • 作用:用于读取操作。多个连接可以同时持有SHARED锁,允许并发读操作,因为读取操作不会修改数据,不会相互冲突。
  • 获取时机:当执行SELECT语句时,SQLite会尝试获取SHARED锁。
  • 释放时机:SELECT语句执行完毕后,SHARED锁会被释放。
  • 对并发一致性的保证:多个连接能同时获取SHARED锁进行读操作,互不干扰,保证了读操作的并发一致性。只要有SHARED锁存在,就不允许获取EXCLUSIVE锁进行写操作,防止写操作破坏读操作的一致性。

RESERVED锁

  • 作用:表示连接打算写入数据,但此时数据库可能还有其他连接在进行读操作。持有RESERVED锁的连接可以继续读取数据,但不能进行写入。
  • 获取时机:当一个连接准备开始写入数据(例如执行INSERT、UPDATE、DELETE语句),且当前数据库有其他连接持有SHARED锁时,该连接会先获取RESERVED锁。
  • 释放时机:当所有其他连接释放SHARED锁,且该连接准备开始实际写入操作时,RESERVED锁会升级为EXCLUSIVE锁,RESERVED锁状态结束;如果写入操作取消,RESERVED锁也会被释放。
  • 对并发一致性的保证:RESERVED锁的存在阻止其他连接获取EXCLUSIVE锁,同时允许当前连接继续读取,确保在准备写入时,不会有其他写操作干扰,也不会丢失当前读操作的数据一致性。

EXCLUSIVE锁

  • 作用:用于写入操作,持有EXCLUSIVE锁的连接可以对数据库进行写入修改。在持有EXCLUSIVE锁期间,不允许其他连接进行任何读或写操作。
  • 获取时机:当所有SHARED锁被释放,且连接持有RESERVED锁准备开始实际写入操作时,RESERVED锁会升级为EXCLUSIVE锁;如果没有其他读操作(即无SHARED锁),连接执行写入语句时直接获取EXCLUSIVE锁。
  • 释放时机:写入操作完成(事务提交或回滚)后,EXCLUSIVE锁被释放。
  • 对并发一致性的保证:EXCLUSIVE锁保证了在写入操作时,没有其他连接能同时读或写数据,防止数据不一致。只有当EXCLUSIVE锁释放后,其他连接才能获取SHARED锁进行读操作或重新获取EXCLUSIVE锁进行写操作。

通过这些锁类型及其获取和释放时机的配合,SQLite能够有效管理并发访问,确保在多连接读写操作下数据库的一致性。读操作可并发执行,写操作则在无其他读写操作干扰时执行,避免了数据竞争和不一致问题。