皆さん、こんにちは。問題があり、助けていただきたいのです。
現在、次のような構造のビジネス テーブルがあります
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 コメント 'ピックアップ日',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 BTEE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='ピックアップ ペース テーブル';
現在、ステートメントを同時に実行している 2 つのスレッドがあります。
スレッド 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 ('101336') を実行します。 、'0 '、'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', '0', '3', 'NC) を実行します', '14', '2016', '7.0', '3160.40', '2017-05-29 07:31:27');
スレッド 2 がロックを待機していることが判明しました。
なぜロックが発生するのでしょうか?ありがとう!
デッドロックが発生していると確信していますか? この固有のインデックスが競合していないのは当然です。このテーブルには主キーがありません。主キーを追加してください。
innodb のデフォルトの分離レベルでは、理論上、行ロックはブロックされないはずです。 5.7 でもこの種のトランザクション ロックに対する更新は見当たりません