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;
相关推荐
淼淼爱喝水13 小时前
DVWA SQL 注入(Medium/High 级别)过滤绕过与防范实验(超详细图文版)
数据库·sql·网络安全
csdn_aspnet13 小时前
MySQL主从延迟根因诊断法,从网络、IO、SQL到参数,系统化定位高并发下的同步瓶颈
数据库·mysql·主从
2501_9381768813 小时前
股指期货的交易成本全解析
笔记
中屹指纹浏览器13 小时前
2026多账号运营的零信任架构:指纹浏览器与网络安全的深度融合实践
经验分享·笔记
SHANGHAILINGEN14 小时前
NM | FungAMR数据库,一键筛查真菌耐药基因!
数据库
热爱生活的猴子14 小时前
训练与推理时 Tokenizer Padding 用法笔记
人工智能·笔记·机器学习
牢七14 小时前
jfinal_cms-v5.1.0
数据库
m0_6125359914 小时前
redis入门到精通
数据库·redis·缓存
Kethy__14 小时前
计算机中级-数据库系统工程师-数据结构-树与二叉树(2)
数据结构·数据库·软考··计算机中级
helx8214 小时前
SpringBoot实战(三十二)集成 ofdrw,实现 PDF 和 OFD 的转换、SM2 签署OFD
spring boot·后端·pdf