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;
    • mysql 排他锁(X 锁,行级)插图
欢迎使用66资源网
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
7. 本站有不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!

66源码网 » mysql 排他锁(X 锁,行级)

提供最优质的资源集合

立即查看 了解详情