SQL Server笔记 -- 第72章:隔离级别与锁定

72.1 设置隔离级别示例

设置隔离级别的示例:

sql 复制代码
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM Products WHERE ProductId = 1;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; -- 恢复默认值

隔离级别说明:

  1. READ UNCOMMITTED(未提交读)

    当前事务中的查询无法读取其他事务尚未提交的修改,防止脏读;但可能出现不可重复读和幻读,因为其他事务仍可修改数据。

  2. REPEATABLE READ(可重复读)

    当前事务无法读取其他事务尚未提交的修改,防止脏读;其他事务在当前事务完成前无法修改被读取的数据,从而避免不可重复读;但若其他事务插入新行,再次执行查询可能出现幻读。

  3. SNAPSHOT(快照)

    只能返回查询开始时已提交的数据,确保一致性;防止脏读、不可重复读和幻读。

    使用前先启用数据库选项:

    sql 复制代码
    ALTER DATABASE DBTestName SET ALLOW_SNAPSHOT_ISOLATION ON;
    GO
    SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
  4. READ COMMITTED(已提交读,默认)

    防止读取其他事务未提交的修改;使用共享锁和行版本控制避免脏读。

    行为受 READ_COMMITTED_SNAPSHOT 设置影响;若要启用行版本控制:

    sql 复制代码
    ALTER DATABASE DBTestName SET ALLOW_SNAPSHOT_ISOLATION ON;
    GO
    SET TRANSACTION ISOLATION LEVEL READ COMMITTED; -- 恢复默认
  5. SERIALIZABLE(可串行化)

    使用范围锁,事务结束前锁定所读取的键范围,防止其他事务插入匹配的新行;避免脏读、幻读和不可重复读,但并发性最低,易阻塞,仅必要时使用。

sql 复制代码
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
相关推荐
卷无止境3 分钟前
FastAPI 的 WebSocket 装了些什么
后端·python·fastapi
爱莉希雅&&&12 分钟前
Kubernetes Service 完整学习笔记
笔记·学习·kubernetes
xieliyu.13 分钟前
UPD协议结构以及开发中注意事项
java·开发语言·笔记·java-ee
AINative软件工程13 分钟前
Agent 上下文账本工程:别让工具结果把 128K 窗口塞成垃圾场
后端·架构·ai编程
卷无止境17 分钟前
FastAPI 的 Request 类装了什么
后端·python
程序员爱钓鱼18 分钟前
Rust 方法 Method详解:self、方法调用与API设计
后端·面试·rust
橙子家19 分钟前
MSDTC(微软分布式事务处理协调器)对系统稳定性的影响
后端
卡布叻_星星21 分钟前
后端架构笔记之Maven多模块与微服务
笔记·架构
腾科IT教育25 分钟前
Oracle OCP/OCM认证含金量实测2026版
数据库·oracle·ocp·ocm·甲骨文
程序员爱钓鱼27 分钟前
Go break、continue、goto 详解
后端·面试·go