MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
freemoon
V2EX  ›  MySQL

请教关于 mysql 临键锁工作模式的问题

  •  
  •   freemoon · May 31, 2024 · 1914 views
    This topic created in 713 days ago, the information mentioned may be changed or developed.

    建表

    CREATE
    DATABASE IF NOT EXISTS testdb;
    use
    testdb;
    -- 注意:必须为条件列建立非唯一索引,否则锁全表,下文会验证
    CREATE TABLE students_nk_lock
    (
        id    INT PRIMARY KEY,
        name  VARCHAR(50),
        score INT,
        key   idx_score(score)
    );
    
    INSERT INTO students_nk_lock (id, name, score)
    VALUES (1, 'Alice', 85),
           (4, 'Bob', 90),
           (7, 'Carol', 95),
           (10, 'Lucy', 100);
    

    版本 5.7 ,默认 RR 级别。

    事务 A

    BEGIN;
    SELECT * FROM students_nk_lock WHERE score >= 90 FOR UPDATE;
    

    事务 B

    BEGIN;
    
    
    INSERT INTO students_nk_lock VALUES(0, 'Dave', 83); -- 阻塞
    INSERT INTO students_nk_lock VALUES(2, 'Dave', 84); -- 阻塞
    UPDATE students_nk_lock SET score=85 WHERE score=85; -- 阻塞
    
    
    INSERT INTO students_nk_lock VALUES(5, 'Dave', 85); -- 阻塞
    INSERT INTO students_nk_lock VALUES(5, 'Dave', 91); -- 阻塞
    INSERT INTO students_nk_lock VALUES(11, 'Dave', 101); -- 阻塞
    

    疑问

    对于普通索引,按个人理解应该是锁住 ({1, 85} -> +inf) 这段索引记录范围,然而实测貌似锁了全表,甚是不解!来请教相关大佬

    3 replies    2024-05-31 18:41:12 +08:00
    wenxueywx
        1
    wenxueywx  
       May 31, 2024
    SELECT * FROM students_nk_lock WHERE score >= 90 FOR UPDATE;
    wenxueywx
        2
    wenxueywx  
       May 31, 2024   ❤️ 1
    查询走的全表扫描吧
    你 explain 看看
    freemoon
        3
    freemoon  
    OP
       May 31, 2024
    @wenxueywx #2 嗯,你说的对,谢谢哥们,给我一个思路了!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1004 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 19:14 · PVG 03:14 · LAX 12:14 · JFK 15:14
    ♥ Do have faith in what you're doing.