【问题标题】:Changing autocommit before query and resetting it after在查询之前更改自动提交并在之后重置它
【发布时间】:2019-02-09 19:37:52
【问题描述】:

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

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

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

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

如果我想使用事务,是否需要将其应用于整个项目?还是仅会话或其他解决方法?

【问题讨论】:

    标签: php mysql mysqli transactions


    【解决方案1】:

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

    如果您明确启动事务,则它会在事务期间禁用autocommit

    启用了自动提交的会话可以通过显式的 START TRANSACTION 或 BEGIN 语句开始并以 COMMIT 或 ROLLBACK 语句结束来执行多语句事务。

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

    【讨论】:

    • 太棒了,谢谢。我不知道这些功能。另外,我没有注意标签,下次我会更加小心! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    相关资源
    最近更新 更多