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

MySQLでNULL値を一括更新する方法|UPDATE文とIS NULLの使い方を解説

NULL値を検索して新しい値に更新する基本構文

MySQLでは、IS NULLを使ってNULL値が含まれる行を特定し、UPDATE文とSET句を組み合わせることで、それらのNULL値を任意の値に置き換えることができます。基本的な構文は以下の通りです。

update テーブル名
set カラム名 = 設定したい値
where カラム名 IS NULL;

ここで重要なのは、NULLとの比較に「=」ではなく「IS NULL」を使用する点です。NULLは「値が存在しない」ことを表す特殊な状態のため、通常の比較演算子では正しく判定できません。

サンプルテーブルの作成

まず、動作確認用のテーブルを作成します。

mysql> create table DemoTable768 (
    Clientid int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ClientName varchar(100),
    ClientAge int
);
Query OK, 0 rows affected (0.47 sec)

テストデータの挿入

次に、INSERTコマンドでレコードを挿入します。ここでは、意図的にClientNameがNULLのレコードを2件含めています。

mysql> insert into DemoTable768(ClientName,ClientAge) values('John',23);
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable768(ClientName,ClientAge) values(NULL,26);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable768(ClientName,ClientAge) values('Carol',28);
Query OK, 1 row affected (0.53 sec)
mysql> insert into DemoTable768(ClientName,ClientAge) values(NULL,24);
Query OK, 1 row affected (0.16 sec)

現在のデータを確認する

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from DemoTable768;

実行結果は以下の通りです。

+----------+------------+-----------+
| Clientid | ClientName | ClientAge |
+----------+------------+-----------+
|        1 | John       |        23 |
|        2 | NULL       |        26 |
|        3 | Carol      |        28 |
|        4 | NULL       |        24 |
+----------+------------+-----------+
4 rows in set (0.00 sec)

Clientidが2と4のレコードで、ClientNameがNULLになっていることがわかります。

NULL値を指定の値に更新するクエリ

以下のクエリを実行すると、ClientNameがNULLのレコードだけを「Chris」に更新できます。

mysql> update DemoTable768
    set ClientName='Chris'
    where ClientName IS NULL;
Query OK, 2 rows affected (0.41 sec)
Rows matched: 2 Changed: 2 Warnings: 0

「Rows matched: 2 Changed: 2」と表示されているように、2件のレコードが条件に該当し、実際に2件が更新されました。

更新後のデータを確認する

再度SELECT文を実行して、更新結果を確認します。

mysql> select *from DemoTable768;

実行結果は以下の通りです。

+----------+------------+-----------+
| Clientid | ClientName | ClientAge |
+----------+------------+-----------+
|        1 | John       |        23 |
|        2 | Chris      |        26 |
|        3 | Carol      |        28 |
|        4 | Chris      |        24 |
+----------+------------+-----------+
4 rows in set (0.00 sec)

Clientidが2と4のレコードのClientNameが、NULLから「Chris」へ正しく更新されていることが確認できます。

まとめと注意点

  • NULL値の判定には必ずIS NULL(またはIS NOT NULL)を使用します。「= NULL」と書いても一致しません。
  • WHERE句を付け忘れるとテーブル内の全レコードが更新されてしまうため、実行前には必ず条件を確認しましょう。
  • 本番環境の大量データを扱う場合は、事前に同じ条件でSELECTを実行して対象行を確認してからUPDATEを行うと安全です。
  1. MySQLでENUM型の値にカスタムメッセージを表示する方法

    MySQLでENUM型の値にカスタムメッセージを表示する方法MySQLでは、IF関数による条件分岐を使うことで、ENUM型の値に応じたカスタムメッセージを簡単に表示できます。ここでは、実際のサンプルを使いながら、テーブル作成からメッセージ表示までの手順を順番に解説します。1. テーブルを作成するまず、サンプル用のテーブルを作成しましょう。isActive列には「Y」「N」の2つの値を持つENUM型を定義しています。mysql> create table DemoTable1992 ( ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY

  2. MySQLで列にENUM型を設定する方法

    ```html MySQLでは、テーブルを作成する際に、あらかじめ決められた文字列のリストから値を選ばせたい列に対してENUM型を設定できます。ENUMは、指定した候補値以外のデータが登録されるのを防ぎたい場合に便利なデータ型です。ここでは、実際にテーブルを作成しながら基本的な使い方を見ていきましょう。ENUM型を含むテーブルを作成するまず、学生の点数と合否ステータスを管理するテーブルを作成します。「StudentStatus」列には「First」「Second」「Fail」の3つの値のみを許可するENUM型を設定しています。mysql> create table DemoTable20