はじめに
今回は、MYSQLにおけるトランザクション処理について記載します。
使用環境については下記の記事のものを流用します。
目次
トランザクション処理
トランザクションに使用するコマンド
- BEGIN, START TRANSACTION
- トランザクション処理を開始
- COMMIT
- 変更を反映して、トランザクション処理を終了
- ROLLBACK
- 変更を反映せずに、トランザクション処理を終了
実際の処理(ROLLBACKを使用した場合)
1.「example」データベースの「user」テーブルにて、作業を行います。現在の「user」テーブルの中身を確認します
mysql> USE example;
mysql> SELECT * FROM user;
結果
+------+----------+
| id | username |
+------+----------+
| 1 | testuser |
+------+----------+
1 row in set (0.01 sec)
このテーブルにレコードを追加するときにトランザクション処理を用いて実施していきます。
2.トランザクション処理を開始して「testuser2」のレコードを追加します。
mysql> BEGIN;
mysql> INSERT INTO `user` VALUES (2,'testuser2');
3.レコードが追加できているか確認します。
mysql> SELECT * FROM user;
結果
+------+-----------+
| id | username |
+------+-----------+
| 1 | testuser |
| 2 | testuser2 |
+------+-----------+
2 rows in set (0.01 sec)
この時点では、追加されていることを確認できています。
4.「ROLLBACK」コマンドでトランザクション処理を終了してみます。
mysql> ROLLBACK;
結果
Query OK, 0 rows affected (0.01 sec)
5.再度テーブルを確認します。
mysql> SELECT * FROM user;
結果
+------+----------+
| id | username |
+------+----------+
| 1 | testuser |
+------+----------+
1 row in set (0.00 sec)
先ほど追加したレコードがなくなりました。
「ROLLBACK」によって変更が保存されずに処理が終了したことが確認できました。
実際の処理(COMMITを使用した場合)
1.「example」データベースの「user」テーブルにて、作業を行います。現在の「user」テーブルの中身を確認します
mysql> USE example;
mysql> SELECT * FROM user;
結果
+------+----------+
| id | username |
+------+----------+
| 1 | testuser |
+------+----------+
1 row in set (0.01 sec)
このテーブルにレコードを追加するときにトランザクション処理を用いて実施していきます。
2.トランザクション処理を開始して「testuser2」のレコードを追加します。
mysql> BEGIN;
mysql> INSERT INTO `user` VALUES (2,'testuser2');
3.レコードが追加できているか確認します。
mysql> SELECT * FROM user;
結果
+------+-----------+
| id | username |
+------+-----------+
| 1 | testuser |
| 2 | testuser2 |
+------+-----------+
2 rows in set (0.01 sec)
この時点では、追加されていることを確認できています。
4.「COMMIT」コマンドでトランザクション処理を終了してみます。
mysql> COMMIT;
結果
Query OK, 0 rows affected (0.01 sec)
5.再度テーブルを確認します。
mysql> SELECT * FROM user;
結果
+------+-----------+
| id | username |
+------+-----------+
| 1 | testuser |
| 2 | testuser2 |
+------+-----------+
2 rows in set (0.01 sec)
今回は、レコードが保存されていることが確認できました。
最後に
今回は、トランザクション処理について記載しました。
処理中にトラブルが発生しても「ROLLBACK」で変更をなくすことで、データの不整合を防ぐことができます。
参考文献