MySQL トランザクション処理: 自動送信と手動送信の違い
MySQL データベースでは、トランザクションは一連の SQL ステートメントであり、すべてが正常に実行されたか、またはall 実行は失敗し、データの一貫性と整合性が確保されます。 MySQL では、トランザクションは自動送信と手動送信に分けられ、その違いはトランザクション送信のタイミングとトランザクションの制御範囲にあります。以下では、自動送信と手動送信の違いを詳しく紹介し、具体的なコード例を示して説明します。
1. 自動送信
MySQL では、トランザクション処理が明示的に有効になっていない場合、各 SQL ステートメントは自動的に送信されます。つまり、各 SQL ステートメントの実行後にトランザクションが自動的に送信され、データの変更がすぐに有効になるため、データの整合性は保証されません。
デフォルトでは、MySQL では自動コミット機能が自動的に有効になります。 autocommit パラメータを設定することで自動送信の動作を制御できます。autocommit が 1 の場合は自動送信が有効であることを意味し、autocommit が 0 の場合は自動送信が無効であることを意味します。
次は、自動送信の動作を示す簡単なコード例です。
CREATE TABLE example_table ( id INT 主キー、 名前 VARCHAR(50) ); INSERT INTO example_table VALUES (1, 'アリス'); INSERT INTO example_table VALUES (2, 'Bob'); SELECT * FROM example_table;
上記のコードを実行すると、データが自動的に送信され、データの変更がすぐに有効になります。
2. 手動送信
手動送信とは、トランザクション内で複数の SQL ステートメントを実行し、データの一貫性を確保するために適切なタイミングでトランザクションを手動で送信することを指します。 MySQL では、BEGIN、COMMIT、および ROLLBACK ステートメントを使用して、トランザクションのコミットとロールバックを制御できます。
以下は、手動送信の動作を示すサンプル コードです:
SET autocommit = 0; -- 自動送信をオフにします。 BEGIN; -- トランザクションを開始します UPDATE example_table SET name = 'Alice Smith' WHERE id = 1; DELETE FROM example_table WHERE id = 2; SELECT * FROM example_table; -- データはまだ送信されておらず、クエリ結果には最新の変更が含まれていません。 COMMIT; -- トランザクションをコミットします SELECT * FROM example_table; -- この時点で、データは送信されており、クエリ結果には最新の変更が含まれています
上記のコードでは、手動送信は autocommit を 0 に設定することで自動送信を無効にし、その後、 BEGIN を使用してトランザクションを開始し、複数の SQL ステートメントを実行し、最後に COMMIT を使用してトランザクションをコミットします。手動送信プロセス中、いつでも ROLLBACK を使用してトランザクションをロールバックし、以前の変更を元に戻すことができます。これにより、データの一貫性と完全性が保証されます。
概要:
自動送信と手動送信は、MySQL におけるトランザクション処理の 2 つの方法であり、違いはトランザクション送信のタイミングと制御方法にあります。オートコミットでは、各 SQL ステートメントの実行後にトランザクションが自動的にコミットされますが、手動コミットではトランザクションを明示的に開始および終了する必要があります。実際のアプリケーションでは、データの一貫性と整合性を確保するために、必要に応じて適切な送信方法を選択してください。
以上がMySQL トランザクション処理: 自動送信と手動送信の違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。