

デッドロックが発生したため、`SHOW ENGINE INNODB STATUS`したものの原因が分からなかったので教えてほしいです。  
MySQL5.7を利用しており、トランザクション分離レベルは`REPEATABLE READ`です。

[code]

    > SHOW ENGINE INNODB STATUS
    
    ------------------------
    LATEST DETECTED DEADLOCK
    ------------------------
    *** (1) TRANSACTION:
    INSERT INTO logs (user_id, text) VALUES (25, 'ほげほげ')
    *** (1) WAITING FOR THIS LOCK TO BE GRANTED:
    RECORD LOCKS space id 26 page no 136 n bits 0 index user_id of table `test`.`logs` trx id 29425786 lock_mode X locks gap before rec insert intention waiting
    Record lock, heap no 194 PHYSICAL RECORD: n_fields 3; compact format; info bits 0
     0: len=4; bufptr=0x2b0c04571157; hex= 8000001a; asc     ;;
     1: len=3; bufptr=0x2b0c0457115b; hex= 313133; asc 113;;
     2: len=8; bufptr=0x2b0c0457115e; hex= 8000000000001f48; asc        H;;
    
    *** (2) TRANSACTION:
    INSERT INTO logs (user_id, text) VALUES (26, 'あああ')
    *** (2) HOLDS THE LOCK(S):
    RECORD LOCKS space id 26 page no 136 n bits 0 index contract_id of table `test`.`logs` trx id 29425782 lock_mode X locks gap before rec
    Record lock, heap no 194 PHYSICAL RECORD: n_fields 3; compact format; info bits 0
     0: len=4; bufptr=0x2b0c04571157; hex= 8000001a; asc     ;;
     1: len=3; bufptr=0x2b0c0457115b; hex= 313133; asc 113;;
     2: len=8; bufptr=0x2b0c0457115e; hex= 8000000000001f48; asc        H;;
    
    *** (2) WAITING FOR THIS LOCK TO BE GRANTED:
    RECORD LOCKS space id 26 page no 136 n bits 0 index contract_id of table `test`.`logs` trx id 29425782 lock_mode X locks gap before rec insert intention waiting
    Record lock, heap no 194 PHYSICAL RECORD: n_fields 3; compact format; info bits 0
     0: len=4; bufptr=0x2b0c04571157; hex= 8000001a; asc     ;;
     1: len=3; bufptr=0x2b0c0457115b; hex= 313133; asc 113;;
     2: len=8; bufptr=0x2b0c0457115e; hex= 8000000000001f48; asc        H;;
    
[/code]

↑必要と思われる箇所のみ抜粋しています。

結果としては、user_id=26の処理は成功し、user_id=25の処理は失敗しています。


CC BY-SA 4.0
2023-03-15T06:35:13.183
94187
2023-03-15T06:35:13.183
19297
question
mysql sql database
MySQLのINSERTでデッドロックが発生