トランザクションは論理演算の最小単位です。具体的には、データベース内のSQLステートメントのセットを指します。このSQLのセットは、演算のデータをコミットする前に正常に実行する必要があります。失敗した場合は、ロールバックする必要があり、すべてのSQL操作はその効果を失います。
MySQLでは、操作のSQLステートメントがデフォルトで自動的に送信され、トランザクションを開始して手動コミット(コミット)を実現するためのトランザクション開始メソッドと開始メソッドも提供されます。コミットされていない操作のみをロールバック(ロールバック)できます。 。次に、注意が必要な具体的な使用法と操作の「ピット」を紹介します。
1.
autocommitパラメーターautocommitは、MySQLでデータを実行した直後に結果を送信できるかどうかを決定します。MySQLのデフォルトは1で、自動送信がオンになっていることを意味します。値が0に設定されている場合、結果は送信されません。自動的に送信されます。SQLの実行後、手動で送信するか、ロールバックを選択できます。
(1)autocommitの値を表示し、MySQLデータベースに入力して、
SELECT @@autocommit;
関連する@autocommitの値を確認するには
mysql> select @@autocommit;
+--------------+
| @@autocommit |
+--------------+
| 1 |
+--------------+
1 row in set (0.00 sec)
ここでわかるように、値= 1は、自動コミットがデフォルトでオンになっていることを意味しますが、トランザクションを実装するには、自動コミットをオフにする必要があります。
(2)自動送信をオフにするには、自動コミットの値を設定します。使用する
set autocommit=0;
自動送信をオフにするには、その値を0に設定します。
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> select @@autocommit;
+--------------+
| @@autocommit |
+--------------+
| 0 |
+--------------+
1 row in set (0.00 sec)
このように、sqlステートメントを実行した後、手動で送信する必要があります。そうしないと、結果が変更されません。
(3)コミットとロールバックの効果
+-------+------+-------+
| name | age | id |
+-------+------+-------+
| curry | 15 | 10001 |
+-------+------+-------+
これは、名前、年齢、およびIDフィールドを持つユーザーテーブルです。まず、このテーブルにデータを追加します
mysql> insert into user values('tom',10,2);
Query OK, 1 row affected (0.01 sec)
ここでは、正常に追加されたことがわかりますが、データは本当に保存されていますか?選択して見てください
mysql> select * from user;
+-------+------+-------+
| name | age | id |
+-------+------+-------+
| tom | 10 | 2 |
| curry | 15 | 10001 |
+-------+------+-------+
3 rows in set (0.00 sec)
確かにテーブルにあることがわかりましたが、ここには提出物がありません。ロールバックするとどうなりますか?
mysql> rollback;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from user;
+-------+------+-------+
| name | age | id |
+-------+------+-------+
| curry | 15 | 10001 |
+-------+------+-------+
2 rows in set (0.00 sec)
トム情報がなくなりました。これは、autocommit = 0を設定して自動コミットをオフにし、ロールバックを介してトランザクションを実装する方法です。ただし、このパラメータを設定した後、操作を送信するときにデータベース全体を手動で送信する必要があるという問題があり、非常に面倒です。MySQLは、一連のデータの操作とエラーレポートの手動ロールバックを実際に実現するbeginおよびstartトランザクションメソッドを非常に密接に提供します。
2つ目は
、SQLステートメントを作成する前に開始し、最初に使用することです。
mysql> begin;
Query OK, 0 rows affected (0.01 sec)
mysql> insert into user values('tom',10,2);
Query OK, 1 row affected (0.01 sec)
mysql> select * from user;
+-------+------+-------+
| name | age | id |
+-------+------+-------+
| tom | 10 | 2 |
| curry | 15 | 10001 |
+-------+------+-------+
3 rows in set (0.00 sec)
挿入されましたが、ロールバックを使用してロールバックできますか?
mysql> rollback;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from user;
+-------+------+-------+
| name | age | id |
+-------+------+-------+
| curry | 15 | 10001 |
+-------+------+-------+
ロールバックを成功させるために、次のトランザクション開始方法はこの使用手順と同じです。
3つ目は、トランザクションの開始
がここにあることです。SQLの操作が終了した後、直接ロールバックせず、手動で送信してから、ロールバックして効果を確認します。
開始トランザクションを使用することをお勧めします
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
データを挿入
mysql> insert into user values('tom',10,2);
Query OK, 1 row affected (0.00 sec)
mysql> select * from user;
+-------+------+-------+
| name | age | id |
+-------+------+-------+
| tom | 10 | 2 |
| curry | 15 | 10001 |
+-------+------+-------+
3 rows in set (0.00 sec)
手動提出
mysql> commit;
Query OK, 0 rows affected (0.01 sec)
次に、ロールバックして結果を表示します
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from user;
+-------+------+-------+
| name | age | id |
+-------+------+-------+
| tom | 10 | 2 |
| curry | 15 | 10001 |
+-------+------+-------+
3 rows in set (0.00 sec)
一度送信すると、ロールバックできないことがわかります。送信する前に、ロールバック操作を使用して、SQL効果を保持せずに撤回することができます。次のセクションでは、トランザクションの4つの主要な特性、トランザクションの分離レベル、および発生する可能性のある問題について詳しく説明します。
次のセクション:MySQLデータベースのトランザクション特性とトランザクション分離レベルの問題