MySQLのトランザクションを明示的に終了する方法|COMMITとROLLBACKの違いを解説
MySQLでは、現在実行中のトランザクションを明示的に終了する方法が2つあります。それが「COMMIT」コマンドと「ROLLBACK」コマンドです。どちらもトランザクションを終了させるという点では共通していますが、変更内容の扱いが大きく異なります。本記事では、それぞれのコマンドの動作と具体的な使い方を、サンプルコードとともにわかりやすく解説します。
COMMITコマンドでトランザクションを終了する
COMMITコマンドを実行すると、現在のトランザクションが明示的に終了し、トランザクション内で行われたすべての変更がデータベースに確定(保存)されます。処理内容を恒久的なものにしたい場合は、このコマンドを使用します。
使用例
以下の例では、トランザクションを開始した後、2件のレコードを挿入し、最後に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)
このようにCOMMIT文を実行すると、トランザクションが明示的に終了し、INSERT文で追加したデータがテーブルに保存されます。実際にSELECT文で確認してみましょう。
mysql> SELECT * FROM Marks; +------+---------+---------+-------+ | Id | Name | Subject | Marks | +------+---------+---------+-------+ | 1 | Aarav | Maths | 50 | | 2 | Harshit | Maths | 55 | +------+---------+---------+-------+ 2 rows in set (0.00 sec)
挿入した2件のレコードが正しく反映されていることが確認できます。
ROLLBACKコマンドでトランザクションを終了する
ROLLBACKコマンドを実行すると、現在のトランザクションが明示的に終了し、トランザクション開始以降に行われた変更はすべて取り消されます。誤った操作を行ってしまった場合や、処理を中断したい場合に有効なコマンドです。
使用例
まず、テーブル「Marks」には前述の例で登録した2件のデータが入っている状態とします。ここで新しいトランザクションを開始し、さらに2件のレコードを挿入した後、ROLLBACKを実行してみます。
mysql> SELECT * FROM Marks; +------+---------+---------+-------+ | Id | Name | Subject | Marks | +------+---------+---------+-------+ | 1 | Aarav | Maths | 50 | | 2 | Harshit | Maths | 55 | +------+---------+---------+-------+ 2 rows in set (0.00 sec) mysql> START TRANSACTION; Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO Marks Values(3, 'Rahul','History',40); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO Marks Values(4, 'Yashraj','English',48); Query OK, 1 row affected (0.00 sec) mysql> ROLLBACK; Query OK, 0 rows affected (0.04 sec)
ROLLBACK文を実行することで、トランザクションが明示的に終了し、直前に挿入した2件のデータはすべて破棄されます。再度SELECT文で確認してみましょう。
mysql> SELECT * FROM Marks; +------+---------+---------+-------+ | Id | Name | Subject | Marks | +------+---------+---------+-------+ | 1 | Aarav | Maths | 50 | | 2 | Harshit | Maths | 55 | +------+---------+---------+-------+ 2 rows in set (0.00 sec)
トランザクション内で挿入したレコード(Id: 3、4)は存在せず、テーブルはトランザクション開始前の状態に戻っています。
まとめ:COMMITとROLLBACKの違い
両コマンドの違いを整理すると、以下のようになります。
- COMMIT: トランザクション内の変更を確定(保存)して終了する
- ROLLBACK: トランザクション内の変更を取り消して終了する
いずれのコマンドも、START TRANSACTIONで開始したトランザクションを明示的に終了させる役割を持っています。データの整合性を保ちながら安全に更新作業を行うために、用途に応じて適切に使い分けましょう。
-
【保存版】MySQLのrootユーザーから失われた全権限を復元する方法
MySQLのrootユーザーから権限が失われてしまった場合でも、UPDATE文を使えば全権限を復元することができます。本記事では、rootユーザーの特権(Super_priv)や権限委譲権限(Grant_priv)を復旧させる具体的な手順を解説します。 手順1:mysqldを--skip-grant-tablesオプションで再起動する まず、現在稼働しているmysqld(MySQLサーバー)を停止します。その後、--skip-grant-tablesオプションを付けて再起動してください。このオプションを指定すると、権限テーブル(grant tables)が読み込まれずにサーバーが起動するため、
-
【MySQL入門】別のユーザーとしてログインする方法をわかりやすく解説
MySQLで別のユーザーとしてログインしたい場合は、mysql -u ユーザー名 -p コマンドを使用します。この記事では、新しいユーザーの作成から、作成したユーザーでのログイン方法まで、手順を追って詳しく解説します。別のユーザーとしてログインするための基本構文別のユーザーとしてMySQLにログインする際の基本構文は以下の通りです。> mysql -u yourUsername -pEnter password:コマンドを実行してEnterキーを押すと、パスワードの入力を求められます。ここに該当ユーザーのパスワードを入力すればログインできます。ステップ1:新しいユーザーを作成するまずは、