有四个标准的SQL隔离级别:读未提交、读提交、重复读取和可序列化。(c.f.数据库系统概念(第6版)
在SQLite中,有三个隔离级别:延迟、立即或排他。它们控制如何获取所需的读/写锁。请参阅https://www.oreilly.com/library/view/using-sqlite/9781449394592/ch04s07.html
默认情况下,所有事务(包括自动提交事务)都使用延迟模式。在此模式下,除非需要数据库锁,否则不会获取任何数据库锁。这是最“邻接”的模式,允许其他客户继续访问和使用数据库,直到事务别无选择,只能将它们锁在门外。这允许其他客户端继续使用数据库,但如果在事务需要时锁不可用,则事务将失败,可能需要回滚并重新启动。立即尝试获取保留锁。如果成功,它保证写锁在需要时对事务可用,但仍然允许其他客户端继续访问数据库以进行只读操作。独占模式试图锁定所有其他客户端,包括只读客户端.尽管直接模式和独占模式对其他客户端的限制更大,但其优点是,如果所需的锁不可用,它们将立即失败,而不是在您发出DDL或DML命令之后。
我想知道是否有可能在四个标准SQL隔离级别和三个SQLite隔离级别之间进行一些对应?
发布于 2020-01-23 09:49:25
延迟、立即和排他都不是隔离级别。这三种模式都确保了可序列化的隔离级别。(SQLite的超越始终是可序列化的,因为它实际上序列化了它们;只有一个数据库范围的锁。)
当两个并发只读事务试图更新为写锁时,立即立即采取相当于事务开始时的写锁;这将防止死锁发生。当您想在不实际写入的情况下锁定数据库时,独占非常有用。
https://dba.stackexchange.com/questions/258003
复制相似问题