mysql版本5.7引擎:Innodb
我的表称为" 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'";
这里还有其他表格,也使用了以下内容
md_slot_count
id| popupDate| state| district| taluka| ageGroup| gender| filledSlotCount
cell
cell_str| state| district| taluka| ageGroup| gender
此插入...选择语句在3-4成功运行后导致僵局。
帮助我。如何在mysql中查看"最后的死锁日志"?
我想做这样的事情
交易1->评估上述查询 ->插入行
交易2->评估上述查询 ->插入行
在这里,当第二笔交易评估查询时,必须考虑以前交易插入的数据。在这里,我想允许Max 4交易插入行,不超过此。因此,评估的查询允许插入然后仅插入。
现在在并行请求中,如果这些2个查询评估和插入过程是独立的,并且不考虑先前的事务数据,那么更多的4个交易可以来插入数据。
因此,最终目标是
如果一项交易开始并读取数据并满足条件,则插入数据,而意思是没有其他人进行插入,并且在第一个交易完成后,第二笔交易必须仅考虑所有更新的数据。因此,一项交易和其他交易必须等待。我在并发请求中没有实现,因为所有内容都读了一起读取旧数据,因此所有数据都可以在表中添加数据。 因此,我将整个查询中的整个查询。
您想插入MD_WAITING_SLOT_COUNT从MD_WAITING_SLOT_COUNT计算得出的一些数据。如此僵局是不可避免的。尝试创建一个包含您值的临时表,然后从临时表中插入您的值。