zoukankan      html  css  js  c++  java
  • MySQL--REPLACE INTO导致的死锁案例01

    测试场景

    • MySQL版本: 5.7.29
    • 事务级别: READ-COMMITTED

    测试数据

    
    DROP TABLE IF EXISTS tb1001;
    CREATE TABLE `tb1001` (
      `id` INT(11) NOT NULL AUTO_INCREMENT,
      `c1` INT(11) NOT NULL,
      `c2` INT(11) NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `UNI_C1` (`c1`)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8;
    INSERT INTO TB1001(C1,C2)SELECT 1,1;
    INSERT INTO TB1001(C1,C2)SELECT 2,2;
    INSERT INTO TB1001(C1,C2)SELECT 3,3;
    
    

    测试操作

    会话1先执行:

    BEGIN;
    ## 执行成功
    REPLACE INTO tb1001(c1,c2)VALUES(2,22)
    
    

    会话2再执行:

    BEGIN;
    ## 执行被阻塞
    REPLACE INTO tb1001(c1,c2)VALUES(1,11)
    
    

    会话3查下锁信息:

    mysql> select * from information_schema.INNODB_LOCKS;
    +----------------+-------------+-----------+-----------+-----------------+------------+------------+-----------+----------+-----------+
    | lock_id        | lock_trx_id | lock_mode | lock_type | lock_table      | lock_index | lock_space | lock_page | lock_rec | lock_data |
    +----------------+-------------+-----------+-----------+-----------------+------------+------------+-----------+----------+-----------+
    | 15317:1890:4:3 | 15317       | X         | RECORD    | `test`.`tb1001` | UNI_C1     |       1890 |         4 |        3 | 2         |
    | 15312:1890:4:3 | 15312       | X         | RECORD    | `test`.`tb1001` | UNI_C1     |       1890 |         4 |        3 | 2         |
    +----------------+-------------+-----------+-----------+-----------------+------------+------------+-----------+----------+-----------+
    

    会话1再执行:

    ## 执行成功
    REPLACE INTO tb1001(c1,c2)VALUES(1,11)
    
    

    出现死锁,会话2被回滚

    死锁信息

    ------------------------
    LATEST DETECTED DEADLOCK
    ------------------------
    2021-04-07 16:39:33 0x7f9222cab700
    *** (1) TRANSACTION:
    TRANSACTION 15317, ACTIVE 213 sec updating or deleting
    mysql tables in use 1, locked 1
    LOCK WAIT 4 lock struct(s), heap size 1136, 4 row lock(s), undo log entries 2
    MySQL thread id 55, OS thread handle 140265625392896, query id 395 127.0.0.1 mysql_admin update
    REPLACE INTO tb1001(c1,c2)VALUES(1,11)
    *** (1) WAITING FOR THIS LOCK TO BE GRANTED:
    RECORD LOCKS space id 1890 page no 4 n bits 72 index UNI_C1 of table `test`.`tb1001` trx id 15317 lock_mode X waiting
    Record lock, heap no 3 PHYSICAL RECORD: n_fields 2; compact format; info bits 32
     0: len 4; hex 80000002; asc     ;;
     1: len 4; hex 80000002; asc     ;;
    
    *** (2) TRANSACTION:
    TRANSACTION 15312, ACTIVE 224 sec inserting
    mysql tables in use 1, locked 1
    5 lock struct(s), heap size 1136, 5 row lock(s), undo log entries 3
    MySQL thread id 56, OS thread handle 140265625663232, query id 396 127.0.0.1 mysql_admin update
    REPLACE INTO tb1001(c1,c2)VALUES(1,11)
    *** (2) HOLDS THE LOCK(S):
    RECORD LOCKS space id 1890 page no 4 n bits 72 index UNI_C1 of table `test`.`tb1001` trx id 15312 lock_mode X
    Record lock, heap no 3 PHYSICAL RECORD: n_fields 2; compact format; info bits 32
     0: len 4; hex 80000002; asc     ;;
     1: len 4; hex 80000002; asc     ;;
    
    Record lock, heap no 4 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
     0: len 4; hex 80000003; asc     ;;
     1: len 4; hex 80000003; asc     ;;
    
    *** (2) WAITING FOR THIS LOCK TO BE GRANTED:
    RECORD LOCKS space id 1890 page no 4 n bits 72 index UNI_C1 of table `test`.`tb1001` trx id 15312 lock_mode X waiting
    Record lock, heap no 2 PHYSICAL RECORD: n_fields 2; compact format; info bits 32
     0: len 4; hex 80000001; asc     ;;
     1: len 4; hex 80000001; asc     ;;
    
    *** WE ROLL BACK TRANSACTION (1)
    
    
  • 相关阅读:
    echarts更改鼠标悬浮时的文字
    echarts加定值横线
    js属性对象的hasOwnProperty方法
    React中使用回车键绑定事件
    使用html2canvas插件截图不全的问题,亲测有效!!!
    Windows用Putty以及Pageant配置SSH用于Github等身份验证
    andThenDemo 和Predicate的函数式
    延迟方法的调用---排列数字的大小(Supplier)
    延迟方法的调用---日志错误等级的输出(Supplier)
    延迟方法的调用---日志错误等级的输出
  • 原文地址:https://www.cnblogs.com/gaogao67/p/14634999.html
Copyright © 2011-2022 走看看