2

我在 php 中使用 mysql 扩展,我知道它从 PHP 5.5.0 开始已被弃用,但我已经使用此扩展编写了很多代码。在我看来,mysql_query 提交了查询,如果是这样,则意味着它被设置为自动提交,如何设置它不会自动提交。

4

1 回答 1

5

旧的 mysql 扩展没有专门用于事务控制的功能,但你可以发出 SQL 语句来做你想做的事。

您可以通过启动事务在一个事务期间隐式关闭自动提交:

mysql_query("START TRANSACTION");

一旦您提交或回滚,自动提交模式将恢复为默认值。

mysql_query("COMMIT"); // or ROLLBACK

您可以通过设置会话变量来关闭整个会话的自动提交:

mysql_query("SET autocommit=0");

或者在您的 MySQL 实例上全局更改它,以便更改所有会话的默认值:

mysql_query("SET GLOBAL autocommit=0");

或者通过编辑 /etc/my.cnf 将其设置为在 MySQL 服务启动时更改全局设置:

[mysqld]
autocommit=0

如果您使用 MySQL 5.1,则必须稍有不同:

[mysqld]
init_connect='SET autocommit=0'

您可能已经知道,但需要重复的是,事务仅在您使用 InnoDB 表时才有意义。MyISAM 表不支持事务,因此无论您的设置如何,它们总是自动提交。与其他几个存储引擎相同,包括 MEMORY 和 CSV。

于 2013-02-08T22:29:44.110 回答