MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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では簡単にレコードの範囲を指定した一括更新が実現できます。大量データのメンテナンスやステータスの一括変更など、さまざまな場面で活用できるテクニックなので、ぜひ覚えておきましょう。

  1. MySQLでテーブルの値を更新する方法|UPDATE文とWHERE句の基本

    MySQLでテーブルの値を更新するには? MySQLでは、UPDATE文とWHERE句を組み合わせることで、テーブル内の1行または複数行の値を更新できます。UPDATE文は、WHERE句で指定した条件に一致する行だけを対象に処理を実行するため、意図したレコードだけを安全に書き換えることが可能です。 UPDATE文の基本的な構文 UPDATE テーブル名 SET カラム名1 = 値1, カラム名2 = 値2, ... WHERE 条件; SETの後に更新したいカラムと新しい値を指定し、WHEREの後に更新対象を絞り込む条件を記述します。 具体例:特定の従業員データを更新する 例として、「empl

  2. JavaでMySQLデータベースのレコードを更新する方法【UPDATE文の使い方を実例で解説】

    MySQLデータベースのテーブルに格納されたデータを更新するには、UPDATEコマンドを使用します。本記事では、UPDATE文の基本構文から、実際にテーブルを作成し、Java(JDBC)経由でレコードを更新するまでの一連の手順を、サンプルコード付きで詳しく解説します。 UPDATE文の基本構文 MySQLで既存のデータを更新する場合、以下の構文を使用します。 update テーブル名 set カラム名1 = 値1, ....N where 条件; where句で条件を指定しないと、テーブル内のすべてのレコードが更新されてしまうため注意が必要です。 ステップ1:テーブルの作成 まずは更新用のサン