› 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 · 2274 views
    This topic created in 848 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   ·   Privacy   ·   Solana   ·   850 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 20:39 · PVG 04:39 · LAX 13:39 · JFK 16:39
    ♥ Do have faith in what you're doing.