ホームページ  >  記事  >  データベース  >  MySQL トランザクションの自動コミットは自動的にコミットします

MySQL トランザクションの自動コミットは自動的にコミットします

黄舟
黄舟オリジナル
2017-02-06 10:52:331194ブラウズ

MySQL のデフォルトの動作モードは自動コミット モードです。つまり、明示的にトランザクションを開始しない限り、各クエリは別のトランザクションとして自動的に実行されます。 autocommit の値を設定することで、オートコミット モードを自動的に送信するかどうかを変更できます。

次のコマンドで現在の自動コミット モードを確認できます

mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | ON    |
+---------------+-------+
1 row in set (0.04 sec)

クエリの結果から、Value の値が ON であり、自動コミットがオンであることがわかります。このモードは次の SQL ステートメントで変更できます

mysql> set autocommit = 0;

値 0 と OFF はもちろん、1 は ON を意味します。上記で autocommit=0 を設定すると、コミットまたはロールバック ステートメントが実行されて現在のトランザクションが終了し、新しいトランザクションが開始されるまで、ユーザーは常にトランザクションに参加することになります。

例:

Zhang San は Li Si に 500 元を送金します。その場合、データベース内の操作は次のようになります:

1、まず張三の口座残高が十分であるかどうかを確認します

2、張三の口座から500元を差し引きます

3、李四の口座に500元を追加します

上記コミットを実行するには 3 つのステップを 1 つのトランザクションに含めることができます。すべてが OK の場合は、コミットによって永続的に変更されたデータがコミットされ、エラーが発生した場合には、ロールバックによって変更前の状態にロールバックされます。トランザクション処理を使用すると、Zhang San のお金が Li Si の口座から減っても 500 元増えなかったり、Zhang San のお金が Li Si の口座から減らずに 500 元追加されたりすることはありません。

MySQL のデフォルトのストレージ エンジンは MyISAM です。MyISAM ストレージ エンジンはトランザクション処理をサポートしていないため、自動コミットを変更しても効果はありません。ただし、エラーは報告されないため、トランザクション処理を使用する場合は、操作しているものが InnoDB などのトランザクション処理をサポートしていることを確認する必要があります。テーブルのストレージ エンジンがわからない場合は、テーブル作成ステートメントを参照して、テーブルの作成時にトランザクション タイプを指定するストレージ エンジンがあるかどうかを確認できます。ストレージ エンジンが指定されていない場合は、デフォルトのストレージが使用されます。エンジンはトランザクションをサポートしていない MyISAM です。

もちろん、トランザクション処理はテーブルデータの原子性、一貫性、分離性、耐久性を確保するためのものです。これらはすべてシステム リソースを消費するため、慎重に選択してください。

上記は、MySQL トランザクションの自動コミットによって自動的に送信されるコンテンツです。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。