MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLトランザクションの実装方法をわかりやすく解説

トランザクションとは、複数のSQLステートメントをひとつの処理単位として実行する仕組みです。トランザクション内のいずれかの操作が失敗した場合、トランザクション全体が失敗とみなされ、変更はすべてロールバック(取り消し)されます。逆に、すべての処理が正常に完了すれば、その変更内容はデータベースに確定して保存されます。

MySQLでトランザクションを実装するには、以下の3つのステートメントを使用します。

START TRANSACTION(トランザクションの開始)

その名のとおり、トランザクションはこのステートメントから始まります。START TRANSACTIONを実行すると、MySQLに対して「トランザクションが終了するまで、以降のステートメントをひとつの作業単位として扱う」ように指示します。

COMMIT(変更の確定)

COMMITステートメントは、トランザクション内で行った変更をデータベースに確定します。トランザクションが正常に完了したタイミングでCOMMITコマンドを発行することで、関連するすべてのテーブルへの変更が反映されます。

ROLLBACK(変更の取り消し)

ROLLBACKコマンドは、トランザクション内で実行されたステートメントによる変更をすべて元に戻し、データベースをトランザクション開始前の状態に復元します。エラーが発生した場合などに、データの整合性を保つために使用されます。

実装例

以下に、MySQLトランザクションの実装例を示します。

COMMITを使用した例

mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO Marks Values(1, 'Aarav','Maths',50);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO Marks Values(2, 'Harshit','Maths',55);
Query OK, 1 row affected (0.00 sec)

mysql> COMMIT;
Query OK, 0 rows affected (0.06 sec)

この例では、START TRANSACTIONステートメントでトランザクションを開始し、2つのINSERTステートメントを実行した後、COMMITステートメントで変更を確定しています。COMMITによって変更がデータベースに保存されるため、以下のSELECT文の結果から、値がテーブルに挿入されたことが確認できます。

mysql> SELECT * FROM Marks;
+------+---------+---------+-------+
| Id   | Name    | Subject | Marks |
+------+---------+---------+-------+
| 1    | Aarav   | Maths   | 50    |
| 2    | Harshit | Maths   | 55    |
+------+---------+---------+-------+
2 rows in set (0.00 sec)

ROLLBACKを使用した例

mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO Marks Values(1, 'Aarav','History',40);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO Marks Values(1, 'Harshit','History',48);
Query OK, 1 row affected (0.00 sec)

mysql> ROLLBACK;
Query OK, 0 rows affected (0.04 sec)

この例でも、START TRANSACTIONステートメントでトランザクションを開始し、2つのINSERTステートメントを実行していますが、最後にROLLBACKステートメントを実行しています。ROLLBACKによってデータベースへの変更がすべて取り消されるため、以下のSELECT文の結果から、新しいデータが挿入されていないことが確認できます。

mysql> SELECT * FROM Marks;
+------+---------+---------+-------+
| Id   | Name    | Subject | Marks |
+------+---------+---------+-------+
| 1    | Aarav   | Maths   | 50    |
| 2    | Harshit | Maths   | 55    |
+------+---------+---------+-------+
2 rows in set (0.00 sec)

このように、START TRANSACTIONでトランザクションを開始し、処理が成功すればCOMMITで確定、失敗すればROLLBACKで取り消すという流れが、MySQLにおけるトランザクション管理の基本です。複数のテーブルにまたがるデータ更新など、データの整合性が重要な処理では、トランザクションを活用することで安全なデータ操作が可能になります。

  1. MySQLでNULLを0に置き換えて返す方法:IFNULL()関数の使い方

    MySQLでNULLを0として取得するには MySQLでは、IFNULL()関数を使用することで、NULL値を0に置き換えて取得できます。IFNULL()は第1引数がNULLでない場合はそのまま値を返し、NULLの場合は第2引数で指定した代替値(ここでは0)を返す便利な関数です。 IFNULL()の基本構文 IFNULL(YOUREXPRESSION,0); 実際の動作を確認するために、サンプルテーブルを作成して試してみましょう。 1. テーブルの作成 まず、以下のクエリでテーブルを作成します。 mysql> create table NullDemoWithZero -&g

  2. MySQLでネストされたトランザクションを扱う方法:SAVEPOINTの使い方を解説

    MySQLでは、SAVEPOINTステートメントを使用することで、擬似的に「ネストされたトランザクション」のような処理を実現できます。MySQLは厳密な意味でのネストされたトランザクションを直接サポートしていませんが、セーブポイントを活用することで、トランザクション内の特定の時点まで部分的にロールバックすることが可能になります。 SAVEPOINTによるネストされたトランザクションの基本手順 全体の流れは以下のとおりです。 テーブルを作成する トランザクションを開始する テーブルにレコードを挿入する SAVEPOINTステートメントで名前付きのセーブポイントを設定する ROLLBACK