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におけるトランザクション管理の基本です。複数のテーブルにまたがるデータ更新など、データの整合性が重要な処理では、トランザクションを活用することで安全なデータ操作が可能になります。
-
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
-
MySQLでネストされたトランザクションを扱う方法:SAVEPOINTの使い方を解説
MySQLでは、SAVEPOINTステートメントを使用することで、擬似的に「ネストされたトランザクション」のような処理を実現できます。MySQLは厳密な意味でのネストされたトランザクションを直接サポートしていませんが、セーブポイントを活用することで、トランザクション内の特定の時点まで部分的にロールバックすることが可能になります。 SAVEPOINTによるネストされたトランザクションの基本手順 全体の流れは以下のとおりです。 テーブルを作成する トランザクションを開始する テーブルにレコードを挿入する SAVEPOINTステートメントで名前付きのセーブポイントを設定する ROLLBACK