我什么时候应该使用 MySQL 事务?

Jor*_*rdy 1 php mysql transactions

我阅读了一些关于何时应该使用事务的文章。我读:

什么时候应该使用事务? 基本上任何时候您的工作单元要么对外部更改敏感,要么需要能够在发生错误或其他原因时回滚每个更改。

但是有人可以向我解释得更好吗?

  • 当我执行两个或多个删除/更新/插入查询时,我应该开始一个事务吗?
  • 当我只有一个删除/更新/插入查询时,我是否也应该开始一项事务?
  • 我应该在一个页面上开始交易 10 次,还是整个页面最好只开始一次,或者您是否建议每个页面的最大值(例如 5)?

谢谢你的帮助!

Jon*_*uhn 5

当您有一组相互依赖的查询时,将使用事务。

以银行为例:

  • 银行客户“约翰”向“爱丽丝”的账户转账 100 美元。
  • 对于此示例,有 2 个查询(我没有显示日志记录或交易历史记录...等)。您需要从 John 的余额中扣除 100 美元并将其添加到 Alice 的余额中。
  • Start transaction
  • 从约翰扣除
    • UPDATE accounts SET balance=balance-100 WHERE account='John'
  • 添加到爱丽丝
    • UPDATE accounts SET balance=balance+100 WHERE account='Alice'
  • commit

事务在您提交之前不会保存。因此,如果任一查询中出现错误,您可以调用rollback并撤消自事务启动以来运行的任何查询。如果由于某种原因向 Alice 添加 100 美元的查询失败,您可以回滚而不是从 John 中扣除 100 美元。这是一种确保您可以在需要时自动撤消查询的方法。


  • 当我执行两个或多个删除/更新/插入查询时,我应该开始一个事务吗?

    取决于查询在做什么。

  • 当我只有一个删除/更新/插入查询时,我是否也应该开始一项事务?

    除非您需要一种方法来回滚(撤消)查询,就像您想要进行更新并在调用提交(保存)之前验证它一样。

  • 我应该在一个页面上开始交易 10 次,还是整个页面最好只开始一次,或者您是否建议每个页面的最大值(例如 5)?

    根据需要开始。我怀疑您是否每页有多个交易,因为您很可能在每个页面加载时做一件事(即转账)。