SQL 事务隔离级别
脏读
包含未提交数据的读。例如,事务1 更改了某行。
事务2 在事务1 提交更改之前读取已更改的行。如果事务1 回滚更改,则事务2 便读取了逻辑上从未存在过的行。
不可重复读取
当某个事务不止一次读取同一行,并且一个单独的事务在两次(或多次)读取之间修改该行时。因为在同一个事务内的多次读取之间修改了该行,所以每次读取都生成不同值,从而引发不一致问题。
幻像
通过一个任务,在以前由另一个尚未提交其事务的任务读取的行的范围中插入新行或删除现有行。带有未提交事务的任务由于该范围中行数的更改而无法重复其原始读取。如果某个连接设置其事务隔离级别为可串行,则 SQL Server 使用键范围锁定以防止幻像。
| 隔离级别 | 脏读 | 不可重复读取 | 幻像 |
|---|---|---|---|
| 未提交读 Read Committed | 是 | 是 | 是 |
| 提交读 Read Uncommitted | 否 | 是 | 是 |
| 可重复读 Repeatable Read | 否 | 否 | 是 |
| 可串行读 Serializable | 否 | 否 | 否 |
设置隔离级别:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
浙公网安备 33010602011771号