SQL 锁机制是数据库用来保证并发操作正确性和数据一致性的一套控制机制。其核心原理可以概括为:
在并发访问数据时,通过“加锁”限制其他事务对数据的操作,从而避免脏读、不可重复读、幻读和数据竞争。
下面从原理、分类、实现和典型问题几个层面说明。
当多个事务同时:
如果不加控制,会出现问题:
锁的作用就是:在合适的时间、对合适的数据、加合适的锁。
数据库在访问数据前:
简化模型:
事务A ──加锁──> 数据
事务B ──请求锁──> 阻塞 / 拒绝
UPDATE user SET age=18 WHERE id=1;
LOCK TABLES user WRITE;
SELECT * FROM user LOCK IN SHARE MODE;
SELECT * FROM user FOR UPDATE;
假设一定会冲突
SELECT ... FOR UPDATE;
假设很少冲突
UPDATE user SET age=19, version=2
WHERE id=1 AND version=1;
| 隔离级别 | 锁策略 |
|---|---|
| Read Uncommitted | 几乎不加锁 |
| Read Committed | 语句级锁 |
| Repeatable Read | 事务级锁 |
| Serializable | 强锁 / 范围锁 |
两个事务互相等待:
A 等 B 的锁
B 等 A 的锁
解决:
SQL锁机制的本质是:通过“限制并发访问”来换取“数据一致性”,在性能与正确性之间做平衡。
如果你愿意,我可以用 MySQL / Oracle / PostgreSQL 的具体例子,或者画一张锁冲突示意图来解释。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。