mysql 排他锁(X 锁,行级)
- 定义:事务对记录执行更新 / 删除操作时加的锁,完全阻塞其他事务的 S 锁和 X 锁。
- 触发时机:所有隔离级别下,
UPDATE/DELETE
操作自动加 X 锁;手动加锁:SELECT ... FOR UPDATE;
- 释放时机:事务提交或回滚后释放。
- — 事务A加X锁
BEGIN;
UPDATE score_tbl SET score=95 WHERE student_id=1 AND course_id=1;
— 此时事务A持有该记录的X锁— 事务B尝试加S锁会被阻塞
BEGIN;
SELECT score FROM score_tbl WHERE student_id=1 AND course_id=1 LOCK IN SHARE MODE; — 阻塞 - 3. 意向锁(表级)
意向锁是表级锁,用于标识 “某事务计划对表中某些行加 S 锁或 X 锁”,避免表级锁与行级锁的冲突。分为:意向共享锁(IS):事务计划对某些行加 S 锁前,先对表加 IS 锁;
意向排他锁(IX):事务计划对某些行加 X 锁前,先对表加 IX 锁。
作用:快速判断表中是否有行级锁(例如,若表有 IX 锁,则全表扫描加表锁的操作会被阻塞)。事务 A 更新某行时,先对表加 IX 锁,再对行加 X 锁:
- BEGIN;
— 自动加IX锁(表级),再对行加X锁(行级)
UPDATE score_tbl SET score=95 WHERE student_id=1 AND course_id=1;4. AUTO-INC 锁(表级)
- 定义:针对
AUTO_INCREMENT
自增列的特殊表锁,保证插入时自增值唯一。 - 触发时机:
INSERT
操作插入自增列时自动加锁,插入完成后立即释放(MySQL 5.1.22+ 优化为轻量级锁,并发插入性能提升)。– 表结构:id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(10)
BEGIN;
INSERT INTO students (name) VALUES (‘Alice’); — 加AUTO-INC锁,获取id=1,立即释放
COMMIT;
- 定义:针对
欢迎使用66资源网
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
7. 本站有不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!
66源码网 » mysql 排他锁(X 锁,行级)
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
7. 本站有不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!
66源码网 » mysql 排他锁(X 锁,行级)