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

MySQLのUPDATE文で列にデータを追加・追記する方法(CONCAT関数の使い方)

MySQLで既存の列データに文字列を追加する方法

MySQLでは、UPDATE文とCONCAT()関数を組み合わせることで、既存の列の値を上書きせずに、後ろへ新しいデータを追記(連結)することができます。NULLが含まれる場合にも対応できるよう、IFNULL()関数を併用するのがポイントです。

基本構文

列にデータを追加するための基本構文は以下の通りです。

UPDATE テーブル名 SET
列名 = concat(ifnull(列名,''), '追加したい値1,追加したい値2,追加したい値3');

ifnull()を使うことで、対象の列がNULLだった場合に空文字列として扱われ、「NULL + 文字列」による意図しない結果(NULLになる)を防ぐことができます。

動作確認用テーブルの作成

まず、実際に動きを確認するためにテーブルを作成します。以下のクエリを実行してください。

mysql> create table AppendDataDemo
-> (
-> StudentId int,
-> StudentName varchar(100),
-> StudentAge int
-> );
Query OK, 0 rows affected (1.54 sec)

テストデータの挿入

次に、INSERTコマンドを使っていくつかのレコードを挿入します。あえてNULLを含むレコードも入れておくのがポイントです。

mysql> insert into AppendDataDemo values(101,'John',23);
Query OK, 1 row affected (0.24 sec)

mysql> insert into AppendDataDemo values(102,null,24);
Query OK, 1 row affected (0.74 sec)

mysql> insert into AppendDataDemo values(103,'Mike',26);
Query OK, 1 row affected (0.12 sec)

現在のデータを確認

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

mysql> select *from AppendDataDemo;

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

+-----------+-------------+------------+
| StudentId | StudentName | StudentAge |
+-----------+-------------+------------+
| 101       | John        | 23         |
| 102       | NULL        | 24         |
| 103       | Mike        | 26         |
+-----------+-------------+------------+
3 rows in set (0.00 sec)

StudentId「102」のStudentNameにはNULLが格納されていることがわかります。

UPDATE文で列にデータを追記する

ここからが本題です。次のクエリを実行すると、StudentName列の全データに対して「Carol,Sam,Maria」という文字列が追記されます。

mysql> update AppendDataDemo set StudentName=concat(ifnull(StudentName,""), ' Carol,Sam,Maria');
Query OK, 3 rows affected (0.14 sec)
Rows matched: 3 Changed: 3 Warnings: 0

このクエリのポイントは以下の2点です。

  • concat():既存の値と新しい文字列を連結します。
  • ifnull(StudentName,''):NULLの場合は空文字列に置き換えることで、NULLのまま連結してしまう問題を回避します。

更新後のデータを確認

再度SELECT文でテーブルの中身を確認しましょう。

mysql> select *from AppendDataDemo;

データが追記された結果は以下の通りです。

+-----------+----------------------+------------+
| StudentId | StudentName          | StudentAge |
+-----------+----------------------+------------+
| 101       | John Carol,Sam,Maria | 23         |
| 102       | Carol,Sam,Maria      | 24         |
| 103       | Mike Carol,Sam,Maria | 26         |
+-----------+----------------------+------------+
3 rows in set (0.03 sec)

まとめ

MySQLで列の既存データを保持したまま新しい値を追加したい場合は、UPDATE文内でconcat(ifnull(列名,''), '追加する値')という形を使うのが定番の手法です。特にNULLが混在している可能性がある列に対しては、ifnull()を必ず組み合わせることで、安全にデータを追記できます。ログの蓄積やタグ情報の追加など、さまざまな場面で応用できるテクニックなので、ぜひ覚えておきましょう。

  1. MySQLで列(カラム)の値を置き換える方法|UPDATE文の使い方を解説

    MySQLでテーブルの特定の列(カラム)の値を置き換えたい場合には、UPDATE文を使用します。WHERE句で対象のレコードを指定することで、該当する行だけを安全に更新できます。この記事では、実際のSQLサンプルを使いながら、列の値を置き換える手順を順番に解説していきます。1. サンプルテーブルを作成するまず、動作確認用のテーブルを作成しましょう。以下のクエリを実行します。mysql> create table DemoTable ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, Score int ); Query

  2. MySQLにJSONデータを挿入する方法|JSON型の基本的な使い方を解説

    MySQLでは、カラムのデータ型にJSON型を指定することで、JSON形式のデータをそのまま保存できます。まずJSON型のカラムを持つテーブルを作成し、その後にデータを挿入する流れを見ていきましょう。 1. JSON型のテーブルを作成する 以下のようにCREATE TABLE文で、JSON型のカラムを定義したテーブルを作成します。 mysql> create table DemoTable1876 ( EmployeeInformation JSON ); Query OK, 0 rows affected (0.00 sec) 2. INSERT文でJSON