【MySQL】ロールバック(ROLLBACK)する方法
ここではMySQLで、ロールバック(ROLLBACK)する方法を紹介しています。
MySQLのAUTOCOMMIT設定の確認
MySQLは、デフォルトの設定では、AUTOCOMMITが1となっており、SQLを発行すると即時コミットされる設定になっています。
AUTOCOMMITは次のSQLで確認できます。
mysql> SELECT @@global.autocommit;
+---------------------+
| @@global.autocommit |
+---------------------+
| 1 |
+---------------------+
1 row in set (0.00 sec)
ロールバック(ROLLBACK)する方法
SQLを個別にロールバック可能にするには、明示的にトランザクションを発行しておきます。
例えば次のようなテーブルへのデータ登録をロールバックする場合です。
テーブルのデータは0件です。
mysql> DESC tab1;
+----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| emp_id | varchar(10) | YES | | NULL | |
| emp_name | varchar(100) | YES | | NULL | |
| dept | varchar(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+----------+--------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
mysql> SELECT * FROM tab1;
Empty set (0.01 sec)
トランザクションの開始にはBEGINを宣言します。
その後、INSERT文を発行します。
INSERT文を発行した後、ROLLBACKを実行します。これで先ほど実行したINSERT文がロールバックされ取り消されました。
結果、0件のままとなっています。
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO tab1 VALUES('00001','Suzuki','HR',28);
Query OK, 1 row affected (0.00 sec)
mysql> ROLLBACK;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM tab1;
Empty set (0.00 sec)
BEGINはSTART TRANSACTIONのエイリアスなので、BEGINではなく「START TRANSACTION」でも同様にトランザクションの開始を宣言できます。
mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO tab1 VALUES('00001','Suzuki','HR',28);
Query OK, 1 row affected (0.00 sec)
mysql> ROLLBACK;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM tab1;
Empty set (0.00 sec)