MySQLのロックと同時実行制御を完全解説!初心者でもわかるInnoDBロック方式の基本
生徒
「MySQLって、たくさんの人が同時に使っても大丈夫なんですか?」
先生
「大丈夫ですよ。そのためにロックや同時実行制御という仕組みがあります。」
生徒
「ロックって、なんだか難しそうです……」
先生
「安心してください。鍵付きのノートを使うイメージで説明します。」
1. MySQLとInnoDBとは何か?
MySQLは、データベースと呼ばれる仕組みを管理するソフトです。データベースとは、名前や年齢、メールアドレスのような情報を、表の形で整理して保存する箱のようなものです。
InnoDBは、MySQLの中で使われる「データを保存する方式」の一つです。特に、複数の人が同時にデータを使う場面に強く、ロックや同時実行制御という安全装置がしっかり用意されています。
2. ロックとは?初心者向けの超かんたん説明
ロックとは、簡単に言うと「今はこのデータを使っていますよ」という合図です。たとえば、紙の名簿に鉛筆で名前を書いているとき、他の人が同じページに消しゴムをかけたら困りますよね。
InnoDBのロックは、データを安全に守るための鍵の役割をします。誰かがデータを変更している間は、他の人が勝手に触れないようにします。
3. InnoDBの行ロックを理解しよう
InnoDBの大きな特徴は「行ロック」です。行ロックとは、表全体ではなく、必要な行だけに鍵をかける仕組みです。
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋健 | 22 | ken@example.com
たとえば、山田太郎さんの年齢だけを変更するとき、他の人の行には影響しません。これにより、多くの人が同時にMySQLを使っても、処理が止まりにくくなります。
UPDATE users
SET age = 26
WHERE id = 1;
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 26 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋健 | 22 | ken@example.com
4. 共有ロックと排他ロックの違い
InnoDBには、主に二つのロックがあります。共有ロックと排他ロックです。
共有ロックは「見るだけOK」の鍵です。誰かがデータを読んでいても、他の人も同じデータを見ることができます。
SELECT *
FROM users
WHERE age < 25;
排他ロックは「変更中なので待ってください」という鍵です。このロックがかかると、他の人は読むことも変更することもできません。
5. トランザクションとロックの関係
トランザクションとは、複数の処理を一つのまとまりとして扱う考え方です。全部成功したら確定し、途中で失敗したら元に戻します。
START TRANSACTION;
UPDATE users
SET age = age + 1
WHERE age >= 20;
COMMIT;
この間、InnoDBは自動的にロックを管理します。利用者は細かいロック操作を意識しなくても、安全にデータを扱えます。
6. 同時実行制御とは何か?
同時実行制御とは、複数の人が同時にMySQLを使っても、データが壊れないように調整する仕組みです。
InnoDBでは、ロックとあわせて「MVCC」という仕組みも使われています。これは、過去のデータを一時的に残しておくことで、読む人と書く人がぶつからないようにします。
7. ロック待ちとデッドロック
ロック待ちとは、他の人が鍵を使っているため、順番待ちになる状態です。
デッドロックは、お互いに相手の鍵が空くのを待ち続けて、止まってしまう状態です。InnoDBはこれを自動的に検知して、どちらかを止める仕組みを持っています。
8. 初心者が知っておきたいInnoDBロックのポイント
InnoDBのロックは、自動で安全に管理されるのが特徴です。プログラミング未経験でも、SQLを正しく書くだけで、ロックの恩恵を受けられます。
まずは「同時に使われることを前提に作られている」という点を理解するだけで十分です。MySQLとInnoDBは、安心して使えるデータベースです。