MySQL UPDATEデッドロック分析
740 ワード
Table
Update
Analyse
innodb update文では、次の手順に従います.
1,2ステップの間に類似文update user_がある場合item set status=1 where id=xxx and user_id=xxxはデッドロックをもたらします.PKをロックしてからidxをロックします.user_item_id.
Conclusion
updateは、プライマリ・キーPKをロックしてから操作します.
CREATE TABLE `user_item` (
`id` BIGINT(20) NOT NULL,
`user_id` BIGINT(20) NOT NULL,
`item_id` BIGINT(20) NOT NULL,
`status` TINYINT(4) NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_user_item_id` (`user_id`,`item_id`,`status`)
) ENGINE=INNODB DEFAULT
Update
update user_item set status=1 where user_id=xxx and item_id=xxx
Analyse
innodb update文では、次の手順に従います.
1、 idx_user_item_id ( )
2、PK ( );
, ;
3、 , , 。
1,2ステップの間に類似文update user_がある場合item set status=1 where id=xxx and user_id=xxxはデッドロックをもたらします.PKをロックしてからidxをロックします.user_item_id.
Conclusion
updateは、プライマリ・キーPKをロックしてから操作します.