我认为上面的隔离级别非常相似。

答案

已提交读是一种隔离级别,可保证任何数据读取均已提交坚定的 此刻已读。相同的数据,数据读取后可以自由更改。

可重复读是一种更高的隔离级别,除了保证读已提交级别外,还保证任何数据读不能变,如果事务再次读取相同的数据,它会发现之前读取的数据就位,没有变化,可以读取。

下一个隔离级别可序列化,提供了更强的保证:除了所有可重复读保证之外,它还保证new数据通过后续阅读可以看出。

假设您有一个表 T,其中包含 C 列,其中包含一行,假设它的值为"1"。

BEGIN TRANSACTION;
SELECT * FROM T;
WAITFOR DELAY '00:01:00'
SELECT * FROM T;
COMMIT;

这是一个简单的任务,从表 T 中发出两次读取,两次读取之间有 1 分钟的延迟。

  • 在 READ COMMITTED 下,第二个 SELECT 可能会返回任何 数据。新的数据。
  • 在 REPEATABLE READ 下,第二个 SELECT 保证至少显示从第一个 SELECT 返回的行不变
  • 在 SERIALIZABLE 读取下,第二个选择保证会看到确切地与第一行相同。

如果您遵循上述逻辑,您很快就会意识到可串行化事务虽然可能会让您的生活变得轻松,但始终是完全阻塞 每一个可能的并发操作,因为他们要求没有人可以修改,删除或插入任何行。System.Transactions作用域是可序列化的,这通常可以解释所导致的糟糕性能。

最后,还有 SNAPSHOT 隔离级别。

补充阅读:

来自: stackoverflow.com