MySQL删除完成之前返回php

时间:2015-06-26 17:28:50

标签: php mysql database innodb

摘要:看来我的删除'语句在完成删除之前返回。怎么可以等到它完成?

长版:我有一个针对innoDB MySQL表运行的PHP脚本,它从数据库中删除一组记录。类似的东西:

delete from sections where term = '15/FA'

然后我跟进一组插入语句。

问题是,当先前的删除完成后,我的代码将部分插入我的新记录并清除我插入的一些新记录。那太糟糕了。

如果我打电话给睡觉()'在调用删除后一秒钟运行正常。显然,这不是一个正确或可靠的解决方案,但确实表明存在时间问题。

记录可能比我刚删除的记录多,少或不同。使用'更新'而不是插入不会起作用。

我使用从插入中返回的自动增量ID将更多记录插入到子表中。因此,在一个长脚本中执行整组删除和插入是不切实际的。 (或者,如果是,我不知道如何。)

那么有什么方法可以知道'删除'功能完成了吗?或者我是否需要放弃并切换到真正的数据库?

2 个答案:

答案 0 :(得分:0)

如果表中有大量行,则会发生这种情况,因此查询确实需要一段时间。您可以尝试在要删除的查询列中添加索引。

答案 1 :(得分:0)

在删除行之前,DELETE返回。请详细描述让您认为发生这种情况的步骤。

你有InnoDB标签,所以我假设你正在使用InnoDB?是否涉及多个连接? term被编入索引吗?你在使用BEGIN ... COMMIT?交易是否得到ROLLBACK?

如果所有这些都发生了,它可能出现有些不对劲:

  • 您有两个单独的连接 - 一个连接DELETE。
  • transaction_isolation_mode是READ_UNCOMMITTED或类似的东西。
  • 第二个连接开始在DELETECOMMITted之前查找记录。
  • 您未能检查错误。