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;
相关推荐
+VX:Fegn08953 分钟前
计算机毕业设计|基于java+ vue共享单车信息系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
91刘仁德5 分钟前
C++ 继承和多态 设计模式
c语言·c++·笔记
苏渡苇8 分钟前
Spring Insight 里如何把 Span 画成瀑布时间线
后端·spring·spring cloud·springboot·监控·apm
mysqloffice34 分钟前
数智时代,核心系统数据库架构往哪走
数据库·人工智能
Charlie_Byte39 分钟前
Spring AI 2 手把手:把 filesystem MCP Server 跑通(SSE / stdio + 真调工具)
后端
l1t41 分钟前
DeepSeek总结的 pgColumnar 1.0-alpha4 发布说明
数据库·postgresql
库玛西44 分钟前
哈夫曼树与前缀编码:数据压缩的贪心核心
c语言·c++·笔记·考研
程序猿DD1 小时前
OctaFuse Gateway 2.11.0:流式请求优化、用户折扣策略与错误契约升级
前端·后端
DBA_G1 小时前
南大通用GBase 8s数据库助力某农商行核心系统投产
数据库
Bs_MoneyMagnet1 小时前
基于springboot+vue的非遗物质文化遗产系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring·毕业设计·计算机毕业设计