SQL Server笔记 -- 第63章:事务隔离级别

63.1 已提交读(Read Committed)

sql 复制代码
SET TRANSACTION ISOLATION LEVEL READ COMMITTED

这是第二宽松的隔离级别,可防止脏读。其行为取决于 READ_COMMITTED_SNAPSHOT 设置:

  • 设为 OFF(默认)时,事务使用共享锁阻止其他事务修改当前事务正在读取的行,同时阻止当前事务读取正在被其他事务修改的行。
  • 设为 ON 时,可使用 READCOMMITTEDLOCK 表提示请求共享锁而非行版本控制。

注意:READ COMMITTED 是 SQL Server 的默认隔离级别。

63.2 什么是"脏读"?

脏读(或未提交读)指读取正在被另一事务修改但尚未提交的行。

可用两个查询复现:

查询1------准备事务但不结束:

sql 复制代码
CREATE TABLE dbo.demo (col1 INT, col2 VARCHAR(255))
GO
-- 正常提交的行
BEGIN TRANSACTION;
INSERT INTO dbo.demo(col1,col2) VALUES (99,'Normal transaction');
COMMIT TRANSACTION;

-- 卡在打开事务中的行
BEGIN TRANSACTION;
INSERT INTO dbo.demo(col1,col2) VALUES (42,'Dirty read');
-- 此处不执行 COMMIT 或 ROLLBACK

查询2------使用未提交读读取包括打开事务中的行:

sql 复制代码
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM dbo.demo

返回:

复制代码
col1 | col2
-----+-------------
99   | Normal transaction
42   | Dirty read

清理:

sql 复制代码
COMMIT TRANSACTION;
DROP TABLE dbo.demo;
GO

63.3 未提交读(Read Uncommitted)

sql 复制代码
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

最宽松级别,不放置任何锁,可读取未提交的行,可能出现脏读。

63.4 可重复读(Repeatable Read)

sql 复制代码
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ

比 READ COMMITTED 严格,共享锁会保持到事务结束,而非语句结束,防止不可重复读,但可能出现幻读。注意性能影响和死锁风险。

63.5 快照(Snapshot)

sql 复制代码
SET TRANSACTION ISOLATION LEVEL SNAPSHOT

事务读取的是事务开始时已提交的数据版本,不放置共享锁,可防止脏读、不可重复读和幻读。需先开启数据库选项:

sql 复制代码
ALTER DATABASE YourDB SET ALLOW_SNAPSHOT_ISOLATION ON;

63.6 可串行化(Serializable)

sql 复制代码
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

最严格级别,对读取的键范围加范围锁,防止其他事务插入匹配范围的新行,避免脏读、不可重复读和幻读,但并发度最低,易引发阻塞和死锁,仅必要时使用。

相关推荐
xiaogai_gai2 分钟前
物料主数据从ERP同步到电商中台:基于轻易云的编码映射与增量全量双轨实践
大数据·数据库
xiaominngtongxue5 分钟前
从一次接触网实训课看中职实训教学的组织逻辑
笔记
SelectDB14 分钟前
信创适配速查手册:国产 CPU / OS 对照表、认证许可速查与部署检查项清单
大数据·数据库·数据分析
亚川楼宇自控系统数据中心厂家17 分钟前
机房 3D 可视化技术:从平面监控到立体化管理的升级
大数据·数据库·人工智能
SelectDB23 分钟前
部署形态与存算分离速查:形态对照、配置项清单与关键命令片段
大数据·数据结构·数据库
SelectDB25 分钟前
Workload Group 参数速查:排队与并发配置、CPU 软硬限切换与常见配置问题清单
大数据·数据库·数据分析
xier_ran1 小时前
【infra之路】AI 编译器学习笔记(四):PatternRewriter 与贪心 driver
人工智能·笔记·学习
DBA_G1 小时前
南大通用GBase 8c数据库-两阶段提交事务状态保持讲解(下)
数据库
NineData1 小时前
MySQL 到 Doris 实时数据同步:订单、用户和日志数据入仓方案
数据库·mysql
小小AK1 小时前
采购订单同步策略实战:金蝶云星空到旺店通的字段映射与调度设计
大数据·数据库