MySQLでレコードの範囲を一括更新する方法|BETWEEN演算子の使い方を解説
MySQLで特定の範囲に含まれるレコードをまとめて更新したい場合は、BETWEEN演算子を使うのが便利です。この記事では、サンプルテーブルを作成しながら、Idが5から10までのレコードを一括更新する手順をわかりやすく解説します。
1. サンプルテーブルの作成
まずは、テスト用のテーブル「DemoTable」を作成しましょう。Id列はAUTO_INCREMENTにより自動採番されるように設定します。
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name varchar(20),
Age int
);
Query OK, 0 rows affected (0.53 sec)
2. テストデータの挿入
次に、INSERT文を使って複数のレコードを登録します。
mysql> insert into DemoTable(Name,Age) values('Larry',23);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(Name,Age) values('Sam',24);
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable(Name,Age) values('Chris',21);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable(Name,Age) values('Carol',25);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(Name,Age) values('David',22);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable(Name,Age) values('Robert',26);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable(Name,Age) values('John',20);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable(Name,Age) values('Mike',27);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(Name,Age) values('Johnny',28);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(Name,Age) values('James',23);
Query OK, 1 row affected (0.23 sec)
3. 挿入したレコードの確認
SELECT文でテーブルの中身を確認してみましょう。
mysql> select *from DemoTable;
実行結果は以下の通りです。合計10件のレコードが登録されています。
+----+--------+------+ | Id | Name | Age | +----+--------+------+ | 1 | Larry | 23 | | 2 | Sam | 24 | | 3 | Chris | 21 | | 4 | Carol | 25 | | 5 | David | 22 | | 6 | Robert | 26 | | 7 | John | 20 | | 8 | Mike | 27 | | 9 | Johnny | 28 | | 10 | James | 23 | +----+--------+------+ 10 rows in set (0.00 sec)
4. BETWEEN演算子で範囲指定して更新する
ここが本題です。WHERE Id BETWEEN 5 AND 10のように条件を指定することで、Idが5〜10の範囲に含まれる6件のレコードをまとめて更新できます。今回は、Nameを「Bob」に、Ageを23に変更します。
mysql> update DemoTable set Name='Bob', Age=23 where Id between 5 AND 10; Query OK, 6 rows affected (0.25 sec) Rows matched: 6 Changed: 6 Warnings: 0
「Rows matched: 6 Changed: 6」と表示されており、6件のレコードが正常に更新されたことがわかります。
5. 更新後のレコードを確認する
再度SELECT文を実行して、更新結果を確認しましょう。
+----+-------+------+ | Id | Name | Age | +----+-------+------+ | 1 | Larry | 23 | | 2 | Sam | 24 | | 3 | Chris | 21 | | 4 | Carol | 25 | | 5 | Bob | 23 | | 6 | Bob | 23 | | 7 | Bob | 23 | | 8 | Bob | 23 | | 9 | Bob | 23 | | 10 | Bob | 23 | +----+-------+------+ 10 rows in set (0.00 sec)
Idが5〜10のレコードだけが「Bob / 23」に更新され、それ以外のレコードは元のまま維持されていることが確認できます。
まとめと補足ポイント
- BETWEENは両端を含む:
Id BETWEEN 5 AND 10は「5以上10以下」という意味になります。両端の値も条件に含まれる点に注意してください。 - 比較演算子でも同じことができる:
WHERE Id >= 5 AND Id <= 10と書いても結果は同じです。可読性の観点ではBETWEENの方が意図が伝わりやすいでしょう。 - UPDATE前に必ずSELECTで確認: 本番環境で範囲更新を行う場合は、まず同じWHERE句でSELECTを実行し、対象のレコードが正しいか確認してからUPDATEを実行するのが安全です。
- トランザクションの活用: 重要なテーブルを更新する際は、トランザクション内で処理を行い、問題があればロールバックできるようにしておくと安心です。
このように、BETWEEN演算子を組み合わせることで、MySQLでは簡単にレコードの範囲を指定した一括更新が実現できます。大量データのメンテナンスやステータスの一括変更など、さまざまな場面で活用できるテクニックなので、ぜひ覚えておきましょう。
-
MySQLでテーブルの値を更新する方法|UPDATE文とWHERE句の基本
MySQLでテーブルの値を更新するには? MySQLでは、UPDATE文とWHERE句を組み合わせることで、テーブル内の1行または複数行の値を更新できます。UPDATE文は、WHERE句で指定した条件に一致する行だけを対象に処理を実行するため、意図したレコードだけを安全に書き換えることが可能です。 UPDATE文の基本的な構文 UPDATE テーブル名 SET カラム名1 = 値1, カラム名2 = 値2, ... WHERE 条件; SETの後に更新したいカラムと新しい値を指定し、WHEREの後に更新対象を絞り込む条件を記述します。 具体例:特定の従業員データを更新する 例として、「empl
-
JavaでMySQLデータベースのレコードを更新する方法【UPDATE文の使い方を実例で解説】
MySQLデータベースのテーブルに格納されたデータを更新するには、UPDATEコマンドを使用します。本記事では、UPDATE文の基本構文から、実際にテーブルを作成し、Java(JDBC)経由でレコードを更新するまでの一連の手順を、サンプルコード付きで詳しく解説します。 UPDATE文の基本構文 MySQLで既存のデータを更新する場合、以下の構文を使用します。 update テーブル名 set カラム名1 = 値1, ....N where 条件; where句で条件を指定しないと、テーブル内のすべてのレコードが更新されてしまうため注意が必要です。 ステップ1:テーブルの作成 まずは更新用のサン