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;
相关推荐
小码哥_常2 小时前
一套自己部署的 IM,客户端是同一份 Flutter
前端·后端
Decay__3 小时前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
GlobalInfo5 小时前
2026年机器人多指灵巧手市场分析报告——涵盖行业调查、趋势分析与发展前景
大数据·人工智能·microsoft·微服务·机器人
学长毕设5 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
sbjdhjd5 小时前
网工进阶笔记:H3CSE 园区网全栈技术与协议汇总
网络·笔记·云计算·ssh·网络工程·vlan·aaa
zzu123zsw6 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp
小徐不徐说7 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
努力的小雨7 小时前
给 AI 眼镜开发应用有多难?我从零做了一个陪练,还上架了
后端
论文复现现场7 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
Decay__8 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构