8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【MYSQL】トランザクション処理

Posted at

はじめに

今回は、MYSQLにおけるトランザクション処理について記載します。

使用環境については下記の記事のものを流用します。

目次

  1. トランザクション処理
  2. 最後に
  3. 参考文献

トランザクション処理

トランザクションに使用するコマンド

  • 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」で変更をなくすことで、データの不整合を防ぐことができます。

参考文献

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?