首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在发生故障时运行两次查询

在发生故障时运行两次查询
EN

Stack Overflow用户
提问于 2015-05-28 23:17:04
回答 3查看 372关注 0票数 0

我总是检查MySQL查询是否成功,并再次运行(而不是显示或记录错误等)。

有时,对于重要的查询,我甚至将它们放在有限的While循环中,以便在发生故障时尝试5-10次。

例如:

代码语言:javascript
复制
$update = $db->update("table", ["today" => $date]]);

if ($update === FALSE OR $affected_rows < 1)
{
    // Optional sleep(1);
    $update = $db->update("table", ["today" => $date]]);
}

if ($update === FALSE OR $affected_rows < 1)
{
    // Now log if the second try failed too...
}

但今天我在想,如果这是一件正确的事情,也许甚至已经有一个函数可以重试,而不是在代码中键入两次相同的查询(因此,如果我们更改一个,我们必须记住更改另一个)。

我的问题是

  1. 这样做对吗?有什么坏处吗?(我的意思是,如果成功的话,它不会运行两次)
  2. 是否有更简单的方法来做到这一点(不使用相同的代码两次)?我正在复制粘贴相同的查询两次,如果我更改第一个查询而忘记更改第二个查询,这可能很危险(我使用的是一个PDO包装器Meedo )

P.S. I know the second won't work if the MySQL is down etc, i do it for temporary Failed attempts or Aborts or anything else that may not happen on the second try)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-28 23:28:32

很明显,你在这里追求的策略是“被设计打破”。你没有弄清楚为什么以前的尝试没有成功,而是(盲目地.)“只是再试一次。”(显然,在你的“开发环境”的象牙塔里,它还没有(!)“失败了两次!”但是,它迟早会的。)

您需要“一劳永逸地到达底部”。

为什么(?!)查询第一次尝试失败了吗?有什么合理的理由让它这么做吗?(我没有看到.)因此,这是不够的--“仅仅使问题(似乎)消失”是不够的。你必须解决这个问题。

当您在SQL中“更新”时,在共享数据库中,通常需要使用“事务”。(而且,在MySQL环境中,这意味着您必须使用"InnoDB“表。)您可以进行BEGIN TRANSACTION,然后进行一系列更新(或插入、删除、任何.),然后是COMMITROLLBACK

票数 4
EN

Stack Overflow用户

发布于 2015-05-28 23:32:40

  1. 这不是正确的实施方式。只需查找错误,然后显示错误消息,并要求用户在几秒钟/分钟内重新尝试。
  2. 也许你在找交易记录
票数 1
EN

Stack Overflow用户

发布于 2015-05-28 23:40:42

引用php的话:

使用UPDATE时,MySQL将不会更新新值与旧值相同的列。这就产生了这样一种可能性,即mysql_affected_rows()可能实际上并不等于匹配的行数,而只是实际受查询影响的行数。

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

https://stackoverflow.com/questions/30518605

复制
相关文章

相似问题

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