mysql - SELECT...FOR UPDATE 与多个事务
问题描述
我有一个具有以下架构
的mysql Innodb
表,
并且组合必须是唯一的。我有 2 组,因此对于他们来说,newid 必须是连续的。(我不能对第一个字段做任何事情)我已经编写了一个事务,如下所示m
id, name, type , newid
name, type ,newid
types
id
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
解决方案。
但这会将数据库锁保持足够的时间,以便其他准备执行的事务将失败。我如何使这个系统工作和可扩展。
解决方案
推荐阅读
- angular - NgRx 无需订阅即可获取价值
- html - fromEvent 返回属性在“事件”类型上不存在
- mysql - 为什么 Distinct * 不起作用但 count(Distinct *) 起作用?
- python - Python简单计数脚本
- facebook - facebook meta og:图片未显示在帖子中
- r - Naming a dataframe like the path
- sql - Tracking LIFO Orders in SQL
- inkscape - Inkscape 0.92.2 quits trying to open old file with 90dpi scaling
- c++ - 我的冒泡排序程序有几个错误,它显示最大值、最小值和平均值(C++)
- r - Converting edgelist (occurance) to incidence matrix for social network