暂停mysql操作,直到全部返回true

时间:2012-02-12 13:28:29

标签: php mysql

我无法找到答案,这很可能是因为它有一个我不知道的名字。 Anywho。

如果您对数据库有多个操作,例如:

if(insert_something_to_db($data) == TRUE){
     if(delete_something_else_from_db($data2) == TRUE){
          if(update_something_related_to_the_others_in_db($data3) == TRUE){
               return TRUE;
          }
     } 
} else { 
     return FALSE;
}

如果任何嵌套查询失败,则先前的操作将结束,这会导致数据库中的数据混乱。是否有可能/有一些技术/最佳实践,停止执行操作,直到你知道它们是否都会成功。

我有一个例子:

如果有人想加入某个群组,则会点击“加入群组”   - 在数据库中创建通知。这显示在组所有者的管理面板中。   - 团体所有者可以拒绝/接受申请。

接受:   - 使用新组信息更新申请人用户数据。   - 最初发送给组管理员的通知将被删除   - 为申请人创建新通知,告知他已被录取。

仅当最外层条件返回false(假设用户数据已更新)时,实际数据库才会保留原始数据。如果第一次更新通过,而不是下一次更新,则更新配置文件以反映与新组的链接,但组管理员区域中的通知未消失。

此致 丹尼斯

1 个答案:

答案 0 :(得分:3)

您希望所有查询都在transaction中,以确保全部或全无行为。

基本上,你会:

  • 开始交易
  • 执行您的查询
  • 最后
    • 如果所有查询都成功,请提交交易
    • 否则,回滚交易


您可能希望阅读更多常规信息:Database transaction