MySQLバージョン5.7 エンジン:InnoDBのMySQLのINSERT ...同時要求にデッドロックを引き起こしてselect文
私はテーブルには、 "md_waiting_slot_count" と呼ばれていると、それは、次の列があります。今、私は以下のいる
cell | popupDate | userId | creationTime
をクエリ:
insert into md_waiting_slot_count
select cell, '2017-08-31' as pd, 'abnc' as ui, '2017-08-26 15:55:51'
from
(select sum(slotcount) as tt, cell from
(select 0 as slotcount, cell_str as cell, 'master' from cell where
cell_str in
("Gujarat_Jamnagar_Jamnagar_00-18_Male","Gujarat_Jamnagar_Jamnagar_19-
22_Male")
union all
select slotcount, cell, wting from
(select count(*) as slotcount, cell as cell, 'waiting' as wting from
md_waiting_slot_count where
cell in(SELECT cell_str as cell FROM cell where cell_str
in("Gujarat_Jamnagar_Jamnagar_00-18_Male","Gujarat_Jamnagar_Jamnagar_19-
22_Male"))
and popupDate='2017-08-31' and creationTime > DATE_SUB(NOW(), INTERVAL
20 MINUTE) group by cell) as t1
union all
select filledslotcount as slotcount, id as cell, 'final' from
md_slot_count where id in(
SELECT cell_str as cell FROM cell where cell_str
in("Gujarat_Jamnagar_Jamnagar_00-18_Male","Gujarat_Jamnagar_Jamnagar_19-
22_Male"))
and popupSlotDate='2017-08-31') t group by cell having tt < 4) as ft
order by cell, pd, ui
on duplicate key update creationTime = "'2017-08-26 15:55:51'";
ここ
2他のテーブルも使用している以下の通りです
md_slot_count id| popupDate| state| district| taluka| ageGroup| gender| filledSlotCount
cell cell_str| state| district| taluka| ageGroup| gender
3-4正常に実行した後、デッドロックの原因となるこの挿入... select文。
助けてください。 MySQLで「最後のデッドロックログ」を表示するには?
私はこの
をトランザクション1のような何かやりたい - >挿入行
トランザクション2 - - >クエリ上で評価する - >クエリ上で評価>挿入行
ここで、2番目のトランザクションがクエリを評価するとき、以前のトランザクションによって挿入されたデータを考慮する必要があります。ここでは、最大4トランザクションで行を挿入できるようにしたいと考えています。したがって、評価されたクエリでは、挿入だけが可能です。
クエリの評価と挿入の2つのプロセスが別々であり、以前のトランザクションデータを考慮しない場合、4トランザクション以上が来てデータを挿入できます。 1つのトランザクションを開始し、読み取ったデータを、条件を満たし、その後誰も挿入をしない間にデータを挿入し、意味、および最初のトランザクションとして完全な場合
だから、究極の目標は、2番目のトランザクションがあり、
にありますすべての更新されたデータのみを考慮する。したがって、1つのトランザクションに対しては完了しても何もせず、他のトランザクションは待機する必要があります。 私は同時にすべてのデータを読み込むので、並行要求では達成されないため、すべてのデータがテーブルにデータを追加できるように古いデータを読み込みます。 この全体を1つのクエリで取ります。
あなたは 'md_waiting_slot_count'に挿入すると同時に、挿入中にこのテーブルから選択します。さらに、この表を更新することもあります。私の推測では、この構造はデッドロックの原因です。この方法で挿入をやりなおすことはできますか? –
あなたはすべての異なる番号とタイプの列1です:select cell、 '2017-08-31' as pd、 'abnc' as ui、 '2017-08-26 15:55:51' 2:select slotcount、cell 、wting ..確かにこのクエリの仕事?????? – scaisEdge
@Tim Biegeleisen私は、選択クエリが成功を評価して行を返す場合にのみ挿入を行います。これらが2つの別々のクエリである場合、同時要求では、上記のクエリで句を持つことに言及する4行以上を挿入します。この個別のステートメントは、同時要求では機能しません。 –