首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果发生错误,更新行和回滚我的SQL数据库的最佳方法是什么?

问如果发生错误,更新行和回滚我的SQL数据库的最佳方法是什么?
EN

Stack Overflow用户
提问于 2015-04-16 13:16:24
回答 2查看 585关注 0票数 1

我有一个脚本在我的InnoDB上执行多个更新,但是如果一个更新失败了,我希望所有其他更新都回滚。所以我在网上搜索,我能找到的最好的是PDO::入门交易。除了我希望我的数据库对每一个更新都进行实际更新,如果其中一个失败了,我需要删除以前的每个更新。我需要这样做,因为这个脚本可以从多个用户运行,之前更新过的行不应该再次更新。

例:

这是我的“预备役者”桌:

代码语言:javascript
复制
id | idChambre | idReservation
---+-----------+--------------
0  | 1         | 1

第一行意味着房间1与订单1相匹配,因此不能再匹配。因此,如果没有任何错误发生,该行将保持不变,但如果用户取消或超时事件发生,我希望删除该行。

所以现在我看到了2种方式: pdo事务(但我不知道如何)和我的实际方法:存储我的“订户”表中的每个id,并在发生错误时全部删除它们。

还有更好的办法吗?我做错了吗?

英语不是我的母语所以请友好一点。

EN

回答 2

Stack Overflow用户

发布于 2015-04-16 13:31:05

很抱歉把它写在这里,因为我没什么好评论的。

1)您应该使用所有更新查询都在其中的过程,2)在上述场景中调用begin事务方法后调用该过程,如果任何查询未能更新行,则整个过程将回滚3)您也可以在过程中直接使用mysql事务,请参阅下面链接中的mysql事务,以便在过程级How can I use transactions in my MySQL stored procedure?中使用

票数 0
EN

Stack Overflow用户

发布于 2015-04-16 13:39:01

您可以使用事务管理来实现这一点。检查以下代码:

代码语言:javascript
复制
try {  
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  $conn->beginTransaction();
  $conn->exec("first update query");
  $conn->exec("second update query");
  $conn->commit();

} catch (Exception $e) {
  $conn->rollBack();
  echo "Failed: " . $e->getMessage();
}

如果发生错误,在beginTransaction之后执行的所有更新查询都将回滚。

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

https://stackoverflow.com/questions/29675891

复制
相关文章

相似问题

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