MySQLトランザクション完全解説|初心者でもわかるAtomicity(原子性)とは何か
生徒
「MySQLのトランザクションって聞いたんですけど、Atomicityって何を意味しているんですか?」
先生
「Atomicityは、日本語で原子性と呼ばれていて、処理は全部成功するか、全部失敗するかのどちらかにする、という考え方です。」
生徒
「途中まで成功する、みたいなことは起きないんですか?」
先生
「起きないようにするための仕組みがAtomicityです。途中で止まったら、最初から何もなかった状態に戻します。」
1. MySQLとトランザクションの基本
MySQLは、データベースと呼ばれる情報を整理して保存するためのソフトです。住所録や会員名簿のような表を、パソコンの中で安全に管理できます。
トランザクションとは、複数の操作をひとまとめにして扱う仕組みです。現実の例で言うと、銀行でお金を振り込む作業に似ています。お金を減らす処理と、相手の口座に増やす処理は、必ずセットで行われなければ困ります。
2. Atomicity(原子性)とは何か
Atomicity(原子性)とは、トランザクションの中の処理が「すべて実行される」か「すべて実行されない」かのどちらかになる性質です。
原子とは、これ以上分けられない最小の単位という意味があります。MySQLでは、トランザクションを一つの原子のように扱い、途中で壊れないようにしています。
3. 原子性がないと何が起きるのか
Atomicityがなかった場合、途中まで処理が進んで止まることがあります。例えば、買い物サイトで注文だけ登録されて、在庫が減らない状態が発生すると、大きな問題になります。
MySQLのAtomicityは、このような中途半端な状態を防ぎ、データの整合性を守る役割を持っています。
4. トランザクション開始前のテーブル例
以下は、口座情報を管理するテーブルの例です。
id | name | balance
---+------------+---------
1 | 山田太郎 | 10000
2 | 佐藤花子 | 5000
3 | 鈴木一郎 | 8000
4 | 高橋次郎 | 3000
5. Atomicityを守るトランザクションの例
山田太郎さんから佐藤花子さんへお金を移す処理を考えます。このとき、二つの処理を一つのトランザクションとしてまとめます。
START TRANSACTION;
UPDATE accounts SET balance = balance - 2000 WHERE name = '山田太郎';
UPDATE accounts SET balance = balance + 2000 WHERE name = '佐藤花子';
COMMIT;
すべて成功した場合のみ、変更が確定します。
6. 途中で失敗した場合の動き
もし途中でエラーが起きた場合、MySQLは変更を取り消します。これをロールバックと呼びます。
START TRANSACTION;
UPDATE accounts SET balance = balance - 2000 WHERE name = '山田太郎';
ROLLBACK;
この場合、山田太郎さんの残高は減りません。
id | name | balance
---+------------+---------
1 | 山田太郎 | 10000
2 | 佐藤花子 | 5000
3 | 鈴木一郎 | 8000
4 | 高橋次郎 | 3000
7. COMMITとROLLBACKの意味
COMMITは「この変更を確定する」という意味です。ROLLBACKは「最初の状態に戻す」という意味になります。
Atomicityは、この二つの命令によって守られています。どちらか一方しか実行されないことで、中途半端な状態が発生しません。
8. 初心者が知っておくべきAtomicityの重要性
パソコンに慣れていない人でも、データが壊れないことは大切だと想像できます。Atomicityは、見えないところでデータを守る保険のような存在です。
MySQLを使ったシステムでは、注文、支払い、登録など重要な処理が多く、Atomicityがあるからこそ安心して使えます。