MySQLの行ロックとテーブルロックの違いを完全解説|初心者でもわかるロックと同時実行制御
生徒
「MySQLを勉強していたら“ロック”って言葉が出てきたんですが、鍵をかけるってことですか?」
先生
「イメージは近いですね。データベースの中のデータを、他の人が勝手に触れないように一時的に止める仕組みです。」
生徒
「行ロックとかテーブルロックとか、種類があって混乱します……」
先生
「大丈夫です。紙の名簿やノートに例えながら、順番に説明していきましょう。」
1. MySQLとデータベースの基本
MySQL(マイエスキューエル)は、データベース管理システムと呼ばれるソフトウェアです。 データベースとは「大量の情報を、きれいに整理して保存するための箱」のようなものです。 例えば、会員情報、商品一覧、注文履歴などを表(テーブル)の形で保存します。
プログラミング未経験の方は、データベースを「紙の名簿がたくさん集まったファイル」と考えてください。 MySQLは、その名簿を安全に、そして複数人で同時に使えるように管理してくれます。
2. 同時実行制御とは何か?
同時実行制御とは、複数の人やプログラムが同じデータベースを同時に使っても、 データが壊れないようにする仕組みのことです。
例えば、同じ名簿を二人が同時に書き換えたら、どちらの内容が正しいかわからなくなります。 これを防ぐために、MySQLでは「今はこの人が使っていますよ」という合図を出します。 その合図が「ロック」です。
3. ロックとは?初心者向けの超かんたん説明
ロックとは、データベースの一部に「使用中」の札を付けるような仕組みです。 使用中の札が付いている間は、他の人は勝手に書き換えられません。
ロックにはいくつか種類がありますが、MySQLで特に重要なのが 「行ロック」と「テーブルロック」です。 この2つの違いを理解することが、MySQLのロックと同時実行制御の第一歩です。
4. 行ロックとは?
行ロック(ぎょうロック)とは、テーブルの中の「1行だけ」に鍵をかける仕組みです。 紙の名簿でいうと、特定の1人の行だけを手で押さえて、 他の人がその行を書き換えられないようにするイメージです。
SQL実行前のテーブル
id | name | age | email
---+----------+-----+--------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋次郎 | 22 | jiro@example.com
START TRANSACTION;
SELECT * FROM users WHERE id = 2 FOR UPDATE;
このSQLは「idが2の行を更新する予定なのでロックします」という意味です。 他の人は、idが2の行だけ更新できません。 しかし、idが1や3の行は、同時に操作できます。
SQL実行後のテーブル(まだ見た目は同じ)
id | name | age | email
---+----------+-----+--------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋次郎 | 22 | jiro@example.com
5. テーブルロックとは?
テーブルロックとは、テーブル全体に鍵をかける仕組みです。 紙の名簿でいうと、名簿そのものを引き出しにしまって鍵をかけるイメージです。 誰も中身を見たり書いたりできません。
LOCK TABLES users WRITE;
このSQLを実行すると、usersテーブル全体がロックされます。 他の人は、1行だけでも読むことや更新することができません。
UNLOCK TABLES;
ロックを解除すると、再び全員がテーブルを使えるようになります。 テーブルロックは強力ですが、その分、同時に使える人が減ります。
6. 行ロックとテーブルロックの違いを比較
行ロックとテーブルロックの最大の違いは「どこまで鍵をかけるか」です。 行ロックは1行だけ、テーブルロックは表全体です。
- 行ロック:他の行は同時に使えるので効率が良い
- テーブルロック:仕組みが単純だが待ち時間が増えやすい
MySQLでは、InnoDBというエンジンを使うと行ロックが利用できます。 MyISAMという古い仕組みでは、基本的にテーブルロックになります。
7. 行ロックが使われる実際の場面
行ロックは、ネットショップや会員サイトなど、多くの人が同時に使うシステムで活躍します。 例えば、同時に別々の人が自分のプロフィールを変更する場合、 行ロックならお互いに影響しません。
UPDATE users
SET age = 20
WHERE id = 2;
この更新中は、idが2の行だけがロックされます。 他のユーザーのデータは、問題なく操作できます。
8. テーブルロックが使われる場面と注意点
テーブルロックは、データを一気に整理するときや、 管理者がまとめて作業するときに使われることがあります。 ただし、一般ユーザーが多いシステムでは注意が必要です。
長時間テーブルロックをかけると、 他の人が何もできず待たされてしまいます。 MySQLのロックと同時実行制御を理解して、 適切な方法を選ぶことが大切です。