php - 为什么使用innoDB和事务?

标签 php mysql database transactions innodb

所以我想开始一个浏览器游戏项目。仅供练习。

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

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

我第一次接触它是在一个网站上,上面说在编写浏览器游戏时需要 InnoDB。因为它可能被许多人同时使用,并且如果两个人同时访问数据库表(例如相差一纳秒),则可能会造成困惑,数据可能会丢失,或者您的 SELECT 没有更新,尽管它应该在一纳秒前通过访问进行更新(但脚本仍在运行并且还无法更改它)......等等。

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

另一个功能是,如果您的事务中有2个查询并且第二个查询失败,它会“回滚”并“删除”(或从不应用)第一个(成功的)查询的更改。正确的?因此,要么一切按其应有的方式进行,要么什么都没有改变。我认为那太好了。

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

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

  1. 您开始交易
  2. 您执行查询并更改数据库SELECT某些内容
  3. 如果一切顺利,您提交更改,以便将它们应用到数据库
  4. 如果查询出现问题,它会取消并跳转到catch() {},您可以在其中回滚事务和更改没有得到应用

这是正确的吗?当然,除了如何在代码中启动提交回滚事务的问题之外。

最佳答案

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

关于php - 为什么使用innoDB和事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23278306/

相关文章:

mysql - 在表中存储非数字注册号的数据类型

PHP:如何摆脱像 "\u00a0"这样的奇怪字符?

javascript - 画廊通过 jQuery 淡出和淡入

MySql,需要一个查询来从一行中的表中检索多个字段

php - 在盲代码中使用 mysql_real_escape_string

mysql - 每100ms读一次mysql表可以吗?

php - yum install php-mysql 无法安装Centos

php - 无法在mysql php中打印字段的值

MySQL 关联子查询 SUM() ORDER BY

mysql - 我应该拆分一个包含大量数据的表吗?