mysql> select * from t1; +-------+--------+--------+ | a25 | col605 | col609 | +-------+--------+--------+ | -7423 | 0 | 16715 | | -6775 | 1 | 30445 | +-------+--------+--------+ 2 rows in set (0.00 sec) mysql> show create table t1\G *************************** 1. row *************************** Table: t1 Create Table: CREATE TABLE `t1` ( `a25` int(11) NOT NULL DEFAULT '0', `col605` int(11) DEFAULT NULL, `col609` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`a25`,`col609`), UNIQUE KEY `col605` (`col605`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 1 row in set (0.00 sec) 13 threads: n|1|insert into `t1` set `a25`=?,`col605`=abs(?) % 2,`col609`=abs(?) on duplicate key update a25=values(a25),col609=values(col609),col605=values(col605)|smallint,smallint,smallint ------------------------ LATEST DETECTED DEADLOCK ------------------------ 100421 11:31:08 *** (1) TRANSACTION: TRANSACTION 0 299995, ACTIVE 1 sec, OS thread id 360 inserting mysql tables in use 1, locked 1 LOCK WAIT 4 lock struct(s), heap size 1216, 2 row lock(s) MySQL thread id 59, query id 18233 192.168.1.100 root update insert into `t1` set `a25`=-7423,`col605`=abs(-5566) % 2,`col609`=abs(16715) on duplicate key update a25=values(a25),col609=values(col609),col605=values(col605) *** (1) WAITING FOR THIS LOCK TO BE GRANTED: RECORD LOCKS space id 0 page no 50 n bits 496 index `PRIMARY` of table `test`.`t1` trx id 0 299995 lock_mode X locks gap before rec insert intention waiting Record lock, heap no 423 PHYSICAL RECORD: n_fields 5; compact format; info bits 0 0: len 4; hex 7fffe589; asc ;; 1: len 4; hex 800076ed; asc v ;; 2: len 6; hex 0000000493e1; asc ;; 3: len 7; hex 800000003e0084; asc > ;; 4: len 4; hex 80000001; asc ;; *** (2) TRANSACTION: TRANSACTION 0 299998, ACTIVE 1 sec, OS thread id 4988 inserting, thread declared inside InnoDB 1 mysql tables in use 1, locked 1 4 lock struct(s), heap size 1216, 2 row lock(s) MySQL thread id 63, query id 18235 192.168.1.100 root update insert into `t1` set `a25`=-6810,`col605`=abs(-32566) % 2,`col609`=abs(-8813) on duplicate key update a25=values(a25),col609=values(col609),col605=values(col605) *** (2) HOLDS THE LOCK(S): RECORD LOCKS space id 0 page no 50 n bits 496 index `PRIMARY` of table `test`.`t1` trx id 0 299998 lock_mode X locks gap before rec Record lock, heap no 423 PHYSICAL RECORD: n_fields 5; compact format; info bits 0 0: len 4; hex 7fffe589; asc ;; 1: len 4; hex 800076ed; asc v ;; 2: len 6; hex 0000000493e1; asc ;; 3: len 7; hex 800000003e0084; asc > ;; 4: len 4; hex 80000001; asc ;; *** (2) WAITING FOR THIS LOCK TO BE GRANTED: RECORD LOCKS space id 0 page no 50 n bits 496 index `PRIMARY` of table `test`.`t1` trx id 0 299998 lock_mode X locks gap before rec insert intention waiting Record lock, heap no 423 PHYSICAL RECORD: n_fields 5; compact format; info bits 0 0: len 4; hex 7fffe589; asc ;; 1: len 4; hex 800076ed; asc v ;; 2: len 6; hex 0000000493e1; asc ;; 3: len 7; hex 800000003e0084; asc > ;; 4: len 4; hex 80000001; asc ;; *** WE ROLL BACK TRANSACTION (2) ------------ TRANSACTIONS