事务是否确保脏读不会发生?

Does transaction assures dirty reads do not happen?

我最近看了很多书,现在我很困惑事务和锁定是如何工作的以及它们之间的关系。

使用 SQLite 时,想象一下以下流程:

  1. 开始 SQLite 事务
  2. 运行 SQLite 连接上的 select 语句到 return 值
  3. 如果 returned 值满足条件,转到步骤 #4,否则转到步骤 #5
  4. 进行更新
  5. 提交 SQLite 事务

如果两个线程 运行 相同的代码,是否有可能在其中一个线程中获得所谓的 "dirty read" 含义,在步骤 #3 和步骤 #4 之间,其他线程可以 运行 更新(步骤 #4)?

是的,这叫做隔离级别:https://www.sqlite.org/isolation.html