【学习】封锁协议

技术背景(数据库/并发控制)

"封锁协议"是数据库管理系统(DBMS) 中实现**并发控制(Concurrency Control)**的核心机制之一,主要用于解决以下问题:

✅ 目标:

  1. 保证事务隔离性(Isolation)
  2. 避免并发操作导致的数据不一致
    • 如:丢失更新、脏读、不可重复读、幻读等
  3. 协调多个事务同时访问同一数据资源时的行为

🔐 常见封锁协议类型

虽然图片只写了"封锁协议",但在实际应用中,它通常指以下几种经典协议:

表格

协议名称 描述 特点
一级封锁协议 事务T在修改数据R前必须先对其加X锁,直到事务结束才释放。 防止"丢失更新",但允许脏读、不可重复读。
二级封锁协议 在一级基础上,要求读数据前加S锁,读完即可释放。 防止"丢失更新"+"脏读",但仍允许"不可重复读"。
三级封锁协议 在二级基础上,要求S锁必须持有到事务结束。 防止"丢失更新"+"脏读"+"不可重复读",即达到可重复读隔离级别。
两段锁协议(2PL, Two-Phase Locking) 所有锁必须在解锁前申请完毕;一旦开始解锁,就不能再申请新锁。 保证串行化调度,是实现最高隔离性的基础协议。

️ 注意:"封锁协议"有时也泛指这些协议的统称,具体语境下可能特指某一种。


🧩 应用场景举例

假设两个事务 T1 和 T2 同时操作账户余额:

sql 复制代码
-- T1: 转账 100 元从 A 到 B
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 'A';  -- 需要 X 锁
UPDATE accounts SET balance = balance + 100 WHERE id = 'B';  -- 需要 X 锁
COMMIT;

-- T2: 查询 A 的余额
BEGIN;
SELECT balance FROM accounts WHERE id = 'A';  -- 需要 S 锁
COMMIT;

如果没有封锁协议,T2 可能在 T1 修改中途读取到中间状态(脏读),或者 T1 的修改被覆盖(丢失更新)。通过封锁协议,系统会自动加锁并排队执行,确保一致性。


📘 相关术语扩展

  • 共享锁(S Lock / Read Lock):允许多个事务同时读,但阻止写。
  • 排他锁(X Lock / Write Lock):只允许一个事务读写,其他事务均被阻塞。
  • 死锁(Deadlock):两个事务互相等待对方释放锁,需由系统检测并回滚其中一个。
  • 锁粒度:行锁、页锁、表锁 ------ 影响并发性能与开销。

✅ 总结

项目 内容
图片文字 封锁协议
所属领域 数据库系统 / 并发控制
核心作用 规范事务如何加锁/解锁,保障数据一致性和隔离性
典型协议 一级/二级/三级封锁协议、两段锁协议(2PL)
现实意义 是高并发系统中避免数据错乱的关键机制

📌 一句话概括:

"封锁协议"是数据库用来管住"谁什么时候能改数据"的交通规则,没有它,多线程/多用户环境下数据就会乱成一锅粥。




相关推荐
Star(up up up)2 小时前
Redis Windows 安装教程:使用Windows 的 Redis 压缩包
redis·笔记·学习·程序人生·云原生·学习方法·改行学it
女神下凡3 小时前
芯参谋(107):杰理AC_中科蓝讯_开发指南
linux·服务器·网络·单片机·嵌入式硬件
乌暮5 小时前
Spring AOP 与 Spring 事务:用大白话彻底理解原理与实践
java·数据库·spring boot·后端·sql·学习·spring
爱和冰阔落8 小时前
【Linux网络】TCP 半包粘包怎么解决?从长度报头、JSON 拆包到网络计算器完整实战
linux·运维·网络·tcp/ip
蒸蒸yyyyzwd9 小时前
从邓明学习的后端笔记
笔记·学习
say_fall9 小时前
【Linux网络编程】UDP套接字编程:系统编程组件、基础回显服务、InetAddr与地址转换、翻译服务与线程池聊天室
linux·服务器·网络·udp·vr
机器学习之心10 小时前
基于变量相关图与残差学习的 GCN 多变量回归方法——混凝土 28 天抗压强度预测
学习·回归·gcn
我不会插花弄玉1 天前
6.传输层协议UDP【由浅入深-网络】
网络·网络协议·udp
Rabitebla1 天前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
火云代理1 天前
更换网络后为什么会退出登录?分清 IP、Cookie 与会话的关系
服务器·网络·网络协议·tcp/ip·php·ip