2

PHP で mysql 拡張機能を使用しています。PHP 5.5.0 の時点で非推奨であることは知っていますが、この拡張機能を使用して既に多くのコードを記述しています。mysql_query がクエリをコミットするように思えます。もしそうなら、自動コミットに設定されていることを意味します。自動コミットしないように設定する方法。

4

1 に答える 1

5

古い mysql 拡張機能には、トランザクション制御専用の機能はありませんが、SQL ステートメントを発行して、必要なことを行うことができます。

トランザクションを開始するだけで、1 つのトランザクションの間、自動コミットを暗黙的にオフにすることができます。

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 など、他のいくつかのストレージ エンジンと同じです。

于 2013-02-08T22:29:44.110 に答える