# does not conflict INSERT INTO t1 VALUES (5,5); SELECT index_name,lock_type,lock_mode,lock_status,lock_data FROM performance_schema.data_locks WHERE object_schema='test' AND object_name = 't1'; index_name lock_type lock_mode lock_status lock_data NULL TABLE IX GRANTED NULL COMMIT; SELECT * FROM t1; a b 0 0 1 1 3 3 4 4 5 5 # conflicts on `a`, but not on `b` INSERT INTO t1 VALUES (0,5); ERROR 23000: Duplicate entry '0' for key 't1.a' SELECT index_name,lock_type,lock_mode,lock_status,lock_data FROM performance_schema.data_locks WHERE object_schema='test' AND object_name = 't1'; index_name lock_type lock_mode lock_status lock_data NULL TABLE IX GRANTED NULL a RECORD S GRANTED 0, 0 COMMIT; SELECT * FROM t1; a b 0 0 1 1 3 3 4 4 # conflicts on `b`, but not on `a` INSERT INTO t1 VALUES (5,0); ERROR 23000: Duplicate entry '0' for key 't1.PRIMARY' SELECT index_name,lock_type,lock_mode,lock_status,lock_data FROM performance_schema.data_locks WHERE object_schema='test' AND object_name = 't1'; index_name lock_type lock_mode lock_status lock_data NULL TABLE IX GRANTED NULL PRIMARY RECORD S,REC_NOT_GAP GRANTED 0 COMMIT; SELECT * FROM t1; a b 0 0 1 1 3 3 4 4 # conflicts on both `a` and `b` INSERT INTO t1 VALUES (0,0); ERROR 23000: Duplicate entry '0' for key 't1.PRIMARY' SELECT index_name,lock_type,lock_mode,lock_status,lock_data FROM performance_schema.data_locks WHERE object_schema='test' AND object_name = 't1'; index_name lock_type lock_mode lock_status lock_data NULL TABLE IX GRANTED NULL PRIMARY RECORD S,REC_NOT_GAP GRANTED 0 COMMIT; SELECT * FROM t1; a b 0 0 1 1 3 3 4 4 # conflicts on `a` with deleted, but not on `b` INSERT INTO t1 VALUES (2,5); SELECT index_name,lock_type,lock_mode,lock_status,lock_data FROM performance_schema.data_locks WHERE object_schema='test' AND object_name = 't1'; index_name lock_type lock_mode lock_status lock_data NULL TABLE IX GRANTED NULL a RECORD S GRANTED 2, 2 a RECORD S GRANTED 3, 3 a RECORD S,GAP GRANTED 2, 5 COMMIT; SELECT * FROM t1; a b 0 0 1 1 2 5 3 3 4 4 # conflicts on `b` with deleted, but not on `a` INSERT INTO t1 VALUES (5,2); SELECT index_name,lock_type,lock_mode,lock_status,lock_data FROM performance_schema.data_locks WHERE object_schema='test' AND object_name = 't1'; index_name lock_type lock_mode lock_status lock_data NULL TABLE IX GRANTED NULL PRIMARY RECORD S,REC_NOT_GAP GRANTED 2 COMMIT; SELECT * FROM t1; a b 0 0 1 1 3 3 4 4 5 2 # conflicts on both `a` and `b` with deleted row INSERT INTO t1 VALUES (2,2); SELECT index_name,lock_type,lock_mode,lock_status,lock_data FROM performance_schema.data_locks WHERE object_schema='test' AND object_name = 't1'; index_name lock_type lock_mode lock_status lock_data NULL TABLE IX GRANTED NULL PRIMARY RECORD S,REC_NOT_GAP GRANTED 2 a RECORD S GRANTED 2, 2 a RECORD S GRANTED 3, 3 COMMIT; SELECT * FROM t1; a b 0 0 1 1 2 2 3 3 4 4 # conflicts on `a` with deleted, and with `b` on not-deleted INSERT INTO t1 VALUES (2,0); ERROR 23000: Duplicate entry '0' for key 't1.PRIMARY' SELECT index_name,lock_type,lock_mode,lock_status,lock_data FROM performance_schema.data_locks WHERE object_schema='test' AND object_name = 't1'; index_name lock_type lock_mode lock_status lock_data NULL TABLE IX GRANTED NULL PRIMARY RECORD S,REC_NOT_GAP GRANTED 0 COMMIT; SELECT * FROM t1; a b 0 0 1 1 3 3 4 4 # conflicts on `b` with deleted, and with `a` on not-deleted INSERT INTO t1 VALUES (0,2); ERROR 23000: Duplicate entry '0' for key 't1.a' SELECT index_name,lock_type,lock_mode,lock_status,lock_data FROM performance_schema.data_locks WHERE object_schema='test' AND object_name = 't1'; index_name lock_type lock_mode lock_status lock_data NULL TABLE IX GRANTED NULL PRIMARY RECORD S,REC_NOT_GAP GRANTED 2 a RECORD S GRANTED 0, 0 COMMIT; SELECT * FROM t1; a b 0 0 1 1 3 3 4 4 # does not conflict REPLACE INTO t1 VALUES (5,5); SELECT index_name,lock_type,lock_mode,lock_status,lock_data FROM performance_schema.data_locks WHERE object_schema='test' AND object_name = 't1'; index_name lock_type lock_mode lock_status lock_data NULL TABLE IX GRANTED NULL COMMIT; SELECT * FROM t1; a b 0 0 1 1 3 3 4 4 5 5 # conflicts on `a`, but not on `b` REPLACE INTO t1 VALUES (0,5); SELECT index_name,lock_type,lock_mode,lock_status,lock_data FROM performance_schema.data_locks WHERE object_schema='test' AND object_name = 't1'; index_name lock_type lock_mode lock_status lock_data NULL TABLE IX GRANTED NULL a RECORD X GRANTED 0, 0 a RECORD X GRANTED 1, 1 PRIMARY RECORD X,REC_NOT_GAP GRANTED 0 a RECORD X,GAP GRANTED 0, 5 COMMIT; SELECT * FROM t1; a b 0 5 1 1 3 3 4 4 # conflicts on `b`, but not on `a` REPLACE INTO t1 VALUES (5,0); SELECT index_name,lock_type,lock_mode,lock_status,lock_data FROM performance_schema.data_locks WHERE object_schema='test' AND object_name = 't1'; index_name lock_type lock_mode lock_status lock_data NULL TABLE IX GRANTED NULL PRIMARY RECORD X,REC_NOT_GAP GRANTED 0 COMMIT; SELECT * FROM t1; a b 1 1 3 3 4 4 5 0 # conflicts on both `a` and `b` REPLACE INTO t1 VALUES (0,0); SELECT index_name,lock_type,lock_mode,lock_status,lock_data FROM performance_schema.data_locks WHERE object_schema='test' AND object_name = 't1'; index_name lock_type lock_mode lock_status lock_data NULL TABLE IX GRANTED NULL PRIMARY RECORD X,REC_NOT_GAP GRANTED 0 a RECORD X,REC_NOT_GAP GRANTED 0, 0 a RECORD X,GAP GRANTED 0, 0 a RECORD X GRANTED 1, 1 COMMIT; SELECT * FROM t1; a b 0 0 1 1 3 3 4 4 # conflicts on `a` with deleted, but not on `b` REPLACE INTO t1 VALUES (2,5); SELECT index_name,lock_type,lock_mode,lock_status,lock_data FROM performance_schema.data_locks WHERE object_schema='test' AND object_name = 't1'; index_name lock_type lock_mode lock_status lock_data NULL TABLE IX GRANTED NULL a RECORD X GRANTED 2, 2 a RECORD X GRANTED 3, 3 a RECORD X,GAP GRANTED 2, 5 COMMIT; SELECT * FROM t1; a b 0 0 1 1 2 5 3 3 4 4 # conflicts on `b` with deleted, but not on `a` REPLACE INTO t1 VALUES (5,2); SELECT index_name,lock_type,lock_mode,lock_status,lock_data FROM performance_schema.data_locks WHERE object_schema='test' AND object_name = 't1'; index_name lock_type lock_mode lock_status lock_data NULL TABLE IX GRANTED NULL PRIMARY RECORD X,REC_NOT_GAP GRANTED 2 COMMIT; SELECT * FROM t1; a b 0 0 1 1 3 3 4 4 5 2 # conflicts on both `a` and `b` with deleted row REPLACE INTO t1 VALUES (2,2); SELECT index_name,lock_type,lock_mode,lock_status,lock_data FROM performance_schema.data_locks WHERE object_schema='test' AND object_name = 't1'; index_name lock_type lock_mode lock_status lock_data NULL TABLE IX GRANTED NULL PRIMARY RECORD X,REC_NOT_GAP GRANTED 2 a RECORD X GRANTED 2, 2 a RECORD X GRANTED 3, 3 COMMIT; SELECT * FROM t1; a b 0 0 1 1 2 2 3 3 4 4 # conflicts on `a` with deleted, and with `b` on not-deleted REPLACE INTO t1 VALUES (2,0); SELECT index_name,lock_type,lock_mode,lock_status,lock_data FROM performance_schema.data_locks WHERE object_schema='test' AND object_name = 't1'; index_name lock_type lock_mode lock_status lock_data NULL TABLE IX GRANTED NULL PRIMARY RECORD X,REC_NOT_GAP GRANTED 0 a RECORD X GRANTED 2, 2 a RECORD X GRANTED 3, 3 a RECORD X,GAP GRANTED 2, 0 COMMIT; SELECT * FROM t1; a b 1 1 2 0 3 3 4 4 # conflicts on `b` with deleted, and with `a` on not-deleted REPLACE INTO t1 VALUES (0,2); SELECT index_name,lock_type,lock_mode,lock_status,lock_data FROM performance_schema.data_locks WHERE object_schema='test' AND object_name = 't1'; index_name lock_type lock_mode lock_status lock_data NULL TABLE IX GRANTED NULL PRIMARY RECORD X,REC_NOT_GAP GRANTED 0 PRIMARY RECORD X,REC_NOT_GAP GRANTED 2 a RECORD X GRANTED 0, 0 a RECORD X GRANTED 1, 1 a RECORD X,GAP GRANTED 0, 2 COMMIT; SELECT * FROM t1; a b 0 2 1 1 3 3 4 4