php - 在查询前更改自动提交并在查询后重置它

标签 php mysql mysqli transactions

我对 MySQL 比较陌生。我刚刚“发现”交易。
我知道它们存在,但从未研究过它们。
我想知道的:

我使用 PHP 并使用 INNODB 作为数据库引擎。

我可以在发送查询之前设置 autocommit = 0; 并在查询之后将其设置为 1 吗?

我问这个的原因是因为我已经做了一个相当大的项目并且觉得不需要将整个项目“转换”为交易。感觉就像如果有人提交一些东西并且自动提交将设置为 0,而其他人将发送一个非事务查询,第二个不会“触发”,因为它不是事务。

如果我想使用事务,是否需要将它应用到整个项目?或者它只是 session 还是其他一些解决方法?

最佳答案

当你想将多个语句包装到一个事务中时,不需要禁用autocommit,只需使用mysqli的mysqli_begin_transaction()即可。和 mysqli_commit()启动/提交事务的函数/方法(我会让你弄清楚如何回滚事务)。

如果您显式启动事务,则它会禁用 autocommit在交易期间:

A session that has autocommit enabled can perform a multiple-statement transaction by starting it with an explicit START TRANSACTION or BEGIN statement and ending it with a COMMIT or ROLLBACK statement.

请注意,即使启用了autocommit,innodb 也会对所有数据修改语句使用事务。所有这些设置意味着每个数据修改语句都被包装到一个单语句事务中,而无需您指定事务。

关于php - 在查询前更改自动提交并在查询后重置它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52171895/

相关文章:

php - 正则表达式环视

php - 如果值匹配则更新行,否则插入新行

mysql - 如何获取连接中的对象?

php - 如何使用/不使用循环php随机获取和显示结果

php - 如何在 SQL、Codeigniter 中的一个查询中设置不同的限制不同列?

php - 嵌套事务在 Laravel 中是如何工作的?

javascript - 如何从查看源代码中隐藏我的 js 文件和 js 库

mysql - 如何避免结果集中出现重复值?

MySQL从table2中选择数据,其中table1.field相等(并将其添加到结果中)

php - mysqli_fetch_array 和 MYSQLI_BOTH 有什么区别?