mysqlはデッドロックを置き換えます
習慣沉默
習慣沉默 2017-06-06 09:52:12
0
2
714

皆さん、こんにちは。問題があり、助けていただきたいのです。
現在、次のような構造のビジネス テーブルがあります
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 がロックを待機していることが判明しました。

なぜロックが発生するのでしょうか?ありがとう!

習慣沉默
習慣沉默

全員に返信(2)
Peter_Zhu

デッドロックが発生していると確信していますか? この固有のインデックスが競合していないのは当然です。このテーブルには主キーがありません。主キーを追加してください。

いいねを押す +0
为情所困

innodb のデフォルトの分離レベルでは、理論上、行ロックはブロックされないはずです。 5.7 でもこの種のトランザクション ロックに対する更新は見当たりません

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート