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

MySQLのROLLBACKコマンドでトランザクション内の変更を完全に取り消す方法

現在のトランザクション内で行われた変更をMySQLデータベースから完全に取り消したい場合は、ROLLBACKコマンドを使用します。トランザクションを開始した後にDML文(INSERT、UPDATE、DELETEなど)を実行してデータを変更した場合でも、ROLLBACKを実行すれば、それらの変更はすべて破棄され、データベースはトランザクション開始前の状態に戻ります。

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件のINSERTによる変更が完全に取り消されます。ROLLBACK実行後にテーブルを確認すると、次のように元の2件のデータだけが残っていることがわかります。

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の標準的なストレージエンジンであるInnoDBはトランザクションに対応していますが、MyISAMなどトランザクション非対応のエンジンではROLLBACKしても変更を取り消すことができません。また、MySQLではデフォルトで自動コミット(autocommit)が有効になっているため、明示的に「START TRANSACTION」を実行してトランザクションを開始しないと、各SQL文が即座にコミットされ、ROLLBACKで取り消せなくなる点にも注意しましょう。


  1. MySQLデータベースの列から一意(ユニーク)なレコード数をカウントする方法

    MySQLである列に含まれる重複しない(一意の)レコード数を集計したい場合は、集計関数 COUNT(DISTINCT ...) を GROUP BY 句と組み合わせて使用します。これにより、ユーザーごとの投稿メッセージ数のように、グループ単位での一意レコード数を簡単に取得できます。実際にサンプルを使って確認してみましょう。1. サンプルテーブルを作成するまず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable ( UserName varchar(100), UserPostMessage text ); Query OK,

  2. MySQLで現在のデータベース名を指定してデータベースを削除する方法

    MySQLでは、DROP DATABASE文を使うことでデータベースを削除できます。ここでは、現在接続中のデータベース名を動的に取得し、そのデータベース自身を削除する手順を解説します。1. 現在のデータベース名を取得する現在選択されているデータベース名を確認するには、SELECT DATABASE()を使用します。select database();2. 削除クエリを動的に組み立てる構文現在のデータベース名をユーザー変数に格納し、CONCAT()で削除用のSQL文を組み立て、プリペアドステートメントとして実行します。基本的な構文は以下のとおりです。set @anyVariableName =