PHP mysqli::自动提交 VS "START TRANSACTION"

标签 php mysql transactions mysqli database-connection

在我们的数据库层对象中,我们一直使用通过 mysqli::query 执行的“START TRANSACTION”、“ROLLBACK”和“COMMIT”SQL 语句来管理事务。

今天做了一些研究,我发现了this mention in the MySQL Manual关于使用 API 级调用来管理事务 VS 使用直接 SQL:

Important

Many APIs used for writing MySQL client applications (such as JDBC) provide their own methods for starting transactions that can (and sometimes should) be used instead of sending a START TRANSACTION statement from the client. See Chapter 20, Connectors and APIs, or the documentation for your API, for more information.

并且,在仔细查看 mysqli 后,发现了用于管理事务的 mysqli::autocommit、mysqli::rollback 和 mysqli::commit 方法 (http://us.php.net/manual/en/class.mysqli.php)。

我的问题:使用这些 mysqli 等效项是否更好,为什么?我找不到任何地方说明这些函数是否或为什么比它们的直接 SQL 对应函数执行得更好。

最佳答案

可能有一些原因导致数据访问包装器需要知道事务何时开始/结束。例如,在我的脑海中,连接池方案必须知道先前使用的连接何时在事务中间完成,并且在这种情况下不会将其返回到连接池以供重新使用。

我不知道 mysqli 中有任何问题需要您使用 native 方法而不是 SQL 版本,但在一般情况下可能...这就是为什么它只是“有时应该”。在任何情况下,PHP 方法都比 SQL 字符串版本更容易阅读,所以无论如何我还是要接受它。

关于PHP mysqli::自动提交 VS "START TRANSACTION",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2050310/

相关文章:

php - 无法在 php 7.1 上安装 phpMyAdmin

php - Yii 中使用 updateAll() 递增字段

c# - RepeatableRead 似乎没有锁定读取

php - HTML 页面如何提取通过表单传递的参数?

php - 使用正则表达式匹配整个单词,同时忽略单词的词缀

php - 将 A 表中的值插入到 A 表中

mysql - 如何在mysql中更新超过2个条件的当前时间

mysql - 从与父表具有外键约束的子表中删除记录的成本是多少

c# - .NET TransactionScope 和 MSDTC

sql-server - 这里发生了什么? SQL Server - XACT_ABORT ON + @@ERROR 检查。 .