【问题标题】:Why using innoDB and transactions?为什么使用 innoDB 和事务?
【发布时间】:2014-04-24 19:40:10
【问题描述】:

所以我想开始一个浏览器游戏项目。只是为了练习。

经过多年的PHP 编程,今天我第一次听说transactionsinnoDB

所以我用谷歌搜索了它,仍然有一些问题。

我第一次遇到它是在一个网站上,它说在编写浏览器游戏时需要 InnoDB。因为它可能被很多人同时使用,如果两个人同时访问一个数据库表(例如,相差一纳秒),它可能会变得混乱,数据可能会丢失,或者你的SELECT 不是更新了,虽然它应该在一纳秒前被访问更新(但脚本仍在运行并且无法更改它)......等等。

显然,transactions 通过首先处理第一次访问(直到完成)然后处理第二次访问来解决这个问题。这是正确的吗?

另一个功能是,如果您的 transaction 中有 2 queries 并且第二个失败,它会“回滚”并“删除”(或永远不会应用)第一个(成功)的更改query。对?因此,要么一切都按应有的方式进行,要么根本没有任何变化。我想那会很棒。

另一个问题:我应该什么时候使用事务?每次我访问数据库?还是仅将它用于对数据库的某些特定访问会更好?我应该一直使用try {} catch() {}吗?

最后一个问题: 这笔交易如何进行? 我的理解如下:

  1. 你开始一个transaction
  2. 你做你的queries并改变databaseSELECT一些东西
  3. 如果一切顺利,您 commit 将更改应用到数据库中
  4. 如果 queries 出现问题,它会取消并跳转到 catch() {},您在其中 rollback 进行交易并且不会应用更改

这是正确的吗?当然,除了如何在您的代码中使用startcommitrollbacktransaction 的问题。

【问题讨论】:

    标签: php mysql database transactions innodb


    【解决方案1】:

    是的,这是正确的。您还可以在运行查询之前创建保存点来保存当前点。我强烈建议您查看 mysql 参考的文档,那里解释得很清楚。

    【讨论】:

      猜你喜欢
      • 2011-05-24
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多