【问题标题】:MySQL delete returning before complete in phpMySQL删除在php完成之前返回
【发布时间】:2015-06-26 17:28:49
【问题描述】:

总结:我的“删除”语句似乎在删除完成之前返回。怎么能等到完成呢?

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

delete from sections where term = '15/FA'

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

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

如果我在调用 delete 后调用“sleep()”一秒钟,一切运行正常。显然这不是一个适当或可靠的解决方案,但它确实表明存在时间问题。

与我刚刚删除的记录相比,可能有更多、更少或不同的记录。使用“更新”而不是插入是行不通的。

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

那么有什么方法可以知道“删除”功能何时完成?还是我需要放弃并切换到真正的数据库?

【问题讨论】:

  • 你试过在 MySQL 中使用事务吗?
  • 发布一些代码以便我们实际提供帮助
  • 一些代码可能会有所帮助

标签: php mysql database innodb


【解决方案1】:

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

【讨论】:

【解决方案2】:

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

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

如果所有这些都发生,它可能显示有什么不对劲:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-22
    • 2021-01-31
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    相关资源
    最近更新 更多