【发布时间】:2014-04-24 19:40:10
【问题描述】:
所以我想开始一个浏览器游戏项目。只是为了练习。
经过多年的PHP 编程,今天我第一次听说transactions 和innoDB。
所以我用谷歌搜索了它,仍然有一些问题。
我第一次遇到它是在一个网站上,它说在编写浏览器游戏时需要 InnoDB。因为它可能被很多人同时使用,如果两个人同时访问一个数据库表(例如,相差一纳秒),它可能会变得混乱,数据可能会丢失,或者你的SELECT 不是更新了,虽然它应该在一纳秒前被访问更新(但脚本仍在运行并且无法更改它)......等等。
显然,transactions 通过首先处理第一次访问(直到完成)然后处理第二次访问来解决这个问题。这是正确的吗?
另一个功能是,如果您的 transaction 中有 2 queries 并且第二个失败,它会“回滚”并“删除”(或永远不会应用)第一个(成功)的更改query。对?因此,要么一切都按应有的方式进行,要么根本没有任何变化。我想那会很棒。
另一个问题:我应该什么时候使用事务?每次我访问数据库?还是仅将它用于对数据库的某些特定访问会更好?我应该一直使用try {} catch() {}吗?
最后一个问题: 这笔交易如何进行? 我的理解如下:
- 你开始一个
transaction - 你做你的
queries并改变database或SELECT一些东西 - 如果一切顺利,您
commit将更改应用到数据库中 - 如果
queries出现问题,它会取消并跳转到catch() {},您在其中rollback进行交易并且不会应用更改
这是正确的吗?当然,除了如何在您的代码中使用start、commit 和rollback 和transaction 的问题。
【问题讨论】:
标签: php mysql database transactions innodb