【问题标题】:Does mysql_query commit everythingmysql_query 是否提交所有内容
【发布时间】:2013-01-24 19:02:13
【问题描述】:

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

【问题讨论】:

  • 如果你使用 MySQLi,你可以使用 MySQLi::autocommit。如果你使用 PDO,你可以做 PDO::beginTransaction。没有人愿意帮助 mysql_* 保持活力。
  • 我不相信使用 mysql_* 方法是可能的,你至少需要升级到 mysqli。这可以轻松完成,因为它具有类似于 mysql 的过程式操作。
  • 是的,你可以添加 i,所以我会使用 mysqli
  • 将 mysql 转换为 mysqli 比只添加 i 稍微复杂一点......

标签: php mysql commit


【解决方案1】:

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

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

mysql_query("START TRANSACTION");

只要你 COMMIT 或 ROLLBACK,自动提交模式将恢复为默认模式。

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。

【讨论】:

    猜你喜欢
    • 2010-09-17
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    相关资源
    最近更新 更多