首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP重复更新并插入Innodb,更新找不到正确的记录

问PHP重复更新并插入Innodb,更新找不到正确的记录
EN

Stack Overflow用户
提问于 2015-06-22 14:41:17
回答 1查看 77关注 0票数 0

我使用的是MySQL和InnoDB插件5.5,运行在CentOS 6.6 x64和PHP5.5上。隔离级别设置为可重复读取。

我在一张桌子上吃了大约40,000份记录。如果我只导入大约500条记录,一切都会正常工作。

其中一些记录可能有重叠的日期时间范围。如果是这样的话,那么在PHP中就会有几个步骤。

若要检查重叠记录,请执行选择,如果返回为空,则只需插入新记录即可。如果有返回的记录,则会执行以下步骤。

  1. 使两个重叠记录中较旧的记录失效(记录A)
  2. 将旧记录的不重叠部分复制到新记录(记录C)中,并插入该记录。
  3. 插入两个重叠记录中较新的(记录B)

当我运行40,000条记录的入口时,我可以看到重叠的日期范围,这意味着select查询没有返回任何内容,然后导致特殊的重叠处理不触发。同样,在较小的情况下,所有这些逻辑都能正常工作,我查看了这两种情况下相同的特定重叠日期范围。

在这一点上,当下一个select重叠检查发生时,在逻辑的下一个循环中似乎看不到insert commit。

我开始研究表锁定、事务和隔离级别的选项,但不确定最好的方法是什么。

EN

回答 1

Stack Overflow用户

发布于 2015-06-22 21:42:39

代码语言:javascript
复制
# For each of the 40K rows:
BEGIN;
SELECT ... FOR UPDATE;
check for overlap (etc) and adjust accordingly
COMMIT;

要花很多分钟,可以吗?

它可以在多个线程中完成--这将加快摄入时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30982841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档