首页 > 解决方案 > SELECT...FOR UPDATE 与多个事务

问题描述

我有一个具有以下架构 的mysql Innodb表, 并且组合必须是唯一的。我有 2 组,因此对于他们来说,newid 必须是连续的。(我不能对第一个字段做任何事情)我已经编写了一个事务,如下所示mid, name, type , newidname, type ,newidtypesid

begin
select max(newid) where name = name and type = type  =>fetchedID
insert into m values (name, type, fetchedID+1)
commit

现在这对于正常条目来说运行良好。但是对于一个可扩展的系统,同时插入多个条目,我遇到了一个问题,即相同fetchedID的条目被提取到 2 个不同的条目(max(newid)即为多个事务获取相同的值,即并发读取)。

所以一点点 SO 和谷歌搜索帮助我找到了 SELECT ... FOR UPDATE解决方案。

但这会将数据库锁保持足够的时间,以便其他准备执行的事务将失败。我如何使这个系统工作和可扩展。

标签: mysqlsqltransactionsscalability

解决方案


推荐阅读