MySQLのCONCAT関数を使って列の既存値に文字列を追加する方法
MySQLでは、CONCAT関数とUPDATE文を組み合わせることで、列に格納されている既存の値を上書きせずに、新しい文字列を末尾へ追記できます。この記事では、実際にサンプルテーブルを作成しながら、その手順をわかりやすく解説します。
1. デモ用テーブルを作成する
まず、動作を確認するためのサンプルテーブルを作成しましょう。
mysql> create table addToExistingValueDemo
-> (
-> Instructor_Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Instructor_Name varchar(30),
-> Instructor_TechnicalSubject text
-> );
Query OK, 0 rows affected (0.54 sec)
このテーブルは、講師ID(自動採番の主キー)、講師名、担当技術科目の3つのカラムで構成されています。
2. テストデータを挿入する
次に、INSERT文を使ってレコードを登録します。
mysql> insert into addToExistingValueDemo(Instructor_Name,Instructor_TechnicalSubject) values('John','C,C++');
Query OK, 1 row affected (0.15 sec)
mysql> insert into addToExistingValueDemo(Instructor_Name,Instructor_TechnicalSubject) values('Carol','Java,Python');
Query OK, 1 row affected (0.18 sec)
mysql> insert into addToExistingValueDemo(Instructor_Name,Instructor_TechnicalSubject) values('Bob','MySQL,SQL Server');
Query OK, 1 row affected (0.15 sec)
mysql> insert into addToExistingValueDemo(Instructor_Name,Instructor_TechnicalSubject) values('David','DataStructure');
Query OK, 1 row affected (0.18 sec)
3. 登録されたデータを確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from addToExistingValueDemo;
実行結果は以下のとおりです。
+---------------+-----------------+-----------------------------+ | Instructor_Id | Instructor_Name | Instructor_TechnicalSubject | +---------------+-----------------+-----------------------------+ | 1 | John | C,C++ | | 2 | Carol | Java,Python | | 3 | Bob | MySQL,SQL Server | | 4 | David | DataStructure | +---------------+-----------------+-----------------------------+ 4 rows in set (0.00 sec)
4. CONCAT関数で既存の値に文字列を追加する
ここからが本題です。CONCAT関数を使えば、既存の値と新しい文字列を連結した結果で列を更新できます。例として、Instructor_Idが「4」のDavidの担当科目に「Introduction To Algorithm」を追記してみます。
mysql> update addToExistingValueDemo
-> set Instructor_TechnicalSubject=concat(Instructor_TechnicalSubject,', Introduction To Algorithm')
-> where Instructor_Id=4;
Query OK, 1 row affected (0.10 sec)
Rows matched: 1 Changed: 1 Warnings: 0
ポイントは、concat(Instructor_TechnicalSubject, '追加したい文字列')のように、対象カラム自身をCONCATの引数に指定することです。これにより、元の値を保持したまま新しい文字列を末尾に付け足すことができます。
5. 更新結果を確認する
再度SELECT文を実行して、変更が反映されているか確認しましょう。
mysql> select *from addToExistingValueDemo;
実行結果は以下のとおりです。
+---------------+-----------------+------------------------------------------+ | Instructor_Id | Instructor_Name | Instructor_TechnicalSubject | +---------------+-----------------+------------------------------------------+ | 1 | John | C,C++ | | 2 | Carol | Java,Python | | 3 | Bob | MySQL,SQL Server | | 4 | David | DataStructure, Introduction To Algorithm | +---------------+-----------------+------------------------------------------+ 4 rows in set (0.00 sec)
Instructor_Idが「4」のレコードを見ると、「DataStructure」の後ろに「, Introduction To Algorithm」が追記されていることがわかります。このように、CONCAT関数を活用すれば、既存データを壊すことなく安全に文字列を追加できます。
補足:NULL値に注意しよう
なお、CONCAT関数は引数のいずれかにNULLが含まれると、結果もNULLになってしまう点に注意が必要です。対象カラムにNULLが含まれる可能性がある場合は、IFNULL()やCOALESCE()を組み合わせてNULLを空文字に置き換えておくと安心です。
-
phpMyAdminでMySQLデータベースのカラムにAUTO_INCREMENT(自動採番)を追加する方法
MySQLデータベースのカラムにAUTO_INCREMENT(自動インクリメント)を追加したい場合、ALTERコマンドを使用することで簡単に実現できます。本記事では、SQLコマンドによる方法と、phpMyAdminの画面操作による方法の2つをわかりやすく解説します。ALTERコマンドでAUTO_INCREMENTを追加する基本構文AUTO_INCREMENTを追加するには、以下のような構文を使用します。ALTER TABLE テーブル名 MODIFY カラム名 INT NOT NULL AUTO_INCREMENT;この構文では、既存のカラム定義をMODIFY句で変更し、NOT NULL制約と
-
Javaを使ってDATE型の値をMySQLカラムに挿入する方法【PreparedStatement活用】
はじめに JavaからMySQLのDATE型カラムに日付データを挿入したい場合、PreparedStatementを使用するのが最も安全で推奨される方法です。SQLインジェクション対策にもなり、日付型の変換もスムーズに行えます。 本記事では、Javaプログラムから現在の日付をMySQLテーブルに挿入する手順を、サンプルコード付きでわかりやすく解説します。 1. サンプルテーブルの作成 まず、DATE型のカラム「ArrivalDate」を含むテーブルを作成します。以下はMySQLでの作成例です。 mysql> create table DemoTable( PassengerId