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()を必ず組み合わせることで、安全にデータを追記できます。ログの蓄積やタグ情報の追加など、さまざまな場面で応用できるテクニックなので、ぜひ覚えておきましょう。
-
MySQLで列(カラム)の値を置き換える方法|UPDATE文の使い方を解説
MySQLでテーブルの特定の列(カラム)の値を置き換えたい場合には、UPDATE文を使用します。WHERE句で対象のレコードを指定することで、該当する行だけを安全に更新できます。この記事では、実際のSQLサンプルを使いながら、列の値を置き換える手順を順番に解説していきます。1. サンプルテーブルを作成するまず、動作確認用のテーブルを作成しましょう。以下のクエリを実行します。mysql> create table DemoTable ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, Score int ); Query
-
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