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;
相关推荐
KaMeidebaby3 小时前
卡梅德生物技术快报|骆驼纳米抗体:从原核表达、高通量测序到分子对接全流程实现
前端·数据库·其他·百度·新浪微博
易安说AI4 小时前
Codex 直接住进 JetBrains IDE 里:AI Agent 正在接管熟悉的开发入口
后端
子兮曰5 小时前
Node.js v26.1.0 深度解读:FFI、后量子密码与调试器的进化
前端·后端·node.js
largecode6 小时前
打电话时,怎么让号码显示自己的品牌名称?办理号码认证服务流程
笔记·百度·微信·课程设计·微信公众平台·facebook·新浪微博
2301_783848656 小时前
优化文本分类中堆叠模型的网格搜索性能:避免训练卡顿的实战指南
jvm·数据库·python
Wy_编程6 小时前
go语言中的结构体
开发语言·后端·golang
TE-茶叶蛋6 小时前
DBeaver 的Explain 执行计划,分析sql的性能
数据库·sql
CLX05056 小时前
如何安装Oracle 12c Cloud Control_OMS服务端组件与Agent部署
jvm·数据库·python
米罗篮7 小时前
DSU并查集 & 拓展欧几里得-逆元
c++·经验分享·笔记·算法·青少年编程
m0_617493947 小时前
PySide6 网络请求深度实测:从基础 API 调用到数据解析实战指南
数据库