mysql replace 死鎖
習慣沉默
習慣沉默 2017-06-06 09:52:12
0
2
678

各位好,遇到一個問題,請教大家。
我現在有一張業務表,結構如下
CREATE TABLE rms_pickup_step_agg (
htl_cd varchar(20) DEFAULT NULL COMMENT '飯店編號',
#para_typ int(11) DEFAULT NULL COMMENT '匯總類型',
##para_cd varchar(100) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '匯總代碼',
sub_typ int(11) DEFAULT NULL COMMENT '子型別',
sub_cd varchar(100) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '子型別碼',
#pickup_day int(11) DEFAULT NULL COMMENT 'Pickup day',
live_dt varchar(30) DEFAULT NULL,
occ float DEFAULT NULL COMMENT '出租房間數',
rev float DEFAULT NULL COMMENT '房費收入',
update_dt datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新時間',# UNIQUE KEY
idx01_rms_pickup_step_agg (htl_cd,para_typ,para_cd,sub_typ,sub_cd,## pickup_day,live_dt
) USING BTREE

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Pickup步速表';


現在有兩個執行緒同時執行語句,
執行緒1 執行replace INTO rms_pickup_step_agg (htl_cd,para_typ,para_cd,sub_typ,sub_cd,pickup_day,live_dt,occ,rev,update_dt) VALUES (',pickup_day,live_dt,occ,rev,update_dt) VALUES ('101336', ' ', '0', '3', 'NC', '14', '2017', '7.0', '3160.40', '2017-05-29 07:31:27');

不提交

線程2 執行replace INTO rms_pickup_step_agg (htl_cd,para_typ,para_cd,sub_typ,sub_cd,pickup_day,live_dt,occ,rev,update_dt) VALUES ('101336', '0', '0NC', '3', ' ', '14', '2016', '7.0', '3160.40', '2017-05-29 07:31:27');

發現線程2出現等待鎖的情況。

為啥會出現鎖?謝謝! ###
習慣沉默
習慣沉默

全部回覆(2)
Peter_Zhu

你確定是出現死鎖了嗎,照道理說不會的吧,這個唯一索引不衝突。這個表沒有主鍵,你加一個主鍵吧。

为情所困

innodb預設隔離等級下,唯一索引,你又是replace,理論上只是行鎖不應該出現阻塞的,確定你的操作只有這些嗎? 5.7也沒看到有這種事務鎖的更新哪

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!