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

MySQLでフィールドから部分的なデータを削除する方法|UPDATE文とREPLACE()関数の使い方

MySQLでは、フィールドに格納された文字列データの一部だけを削除したいケースがよくあります。例えば、テキスト型カラムの中から特定のタグや不要な文字列を取り除きたい場合などです。こうした「部分的なデータ削除」を実現するには、UPDATE文REPLACE()関数を組み合わせて使用します。

この記事では、実際にテーブルを作成し、サンプルデータを挿入しながら、REPLACE()を使った部分削除の手順をわかりやすく解説します。

1. テーブルの作成

まず、ゲーム情報を格納するためのテーブルを作成しましょう。ここでは、GameDetailsというTEXT型のカラムを持つテーブルを定義します。

mysql> create table DemoTable1583
    -> (
    -> GameDetails text
    -> );
Query OK, 0 rows affected (1.38 sec)

2. サンプルデータの挿入

次に、INSERTコマンドを使ってレコードを登録します。GameDetailsカラムには、ゲーム名と価格を含むXML風の文字列を保存しています。

mysql> insert into DemoTable1583 values('<GameName>=Candy</GameName>,<GamePrice>2000</GamePrice>');
Query OK, 1 row affected (0.53 sec)
mysql> insert into DemoTable1583 values('<GameName>=Lucky29</GameName>,<GamePrice>10000</GamePrice>');
Query OK, 1 row affected (0.25 sec)

3. 登録データの確認

SELECT文ですべてのレコードを表示して、現在のデータ内容を確認しておきましょう。

mysql> select * from DemoTable1583;

実行すると、以下のような結果が出力されます。

+------------------------------------------------------------+
| GameDetails                                                  |
+------------------------------------------------------------+
| <GameName>=Candy</GameName>,<GamePrice>2000</GamePrice>    |
| <GameName>=Lucky29</GameName>,<GamePrice>10000</GamePrice> |
+------------------------------------------------------------+
2 rows in set (0.00 sec)

4. REPLACE()を使って部分的なデータを削除する

それでは本題です。REPLACE()関数は、「指定した文字列を別の文字列に置換する」機能を持っています。置換後の文字列として空文字('')を指定すれば、結果的に該当部分を削除できるという仕組みです。

以下のクエリでは、GameDetailsカラム内の「<GameName>=Candy</GameName>」という部分を空文字に置き換えています。

mysql> update DemoTable1583 set GameDetails=replace(GameDetails,'<GameName>=Candy</GameName>','');
Query OK, 1 row affected (0.38 sec)
Rows matched: 2  Changed: 1 Warnings: 0

実行結果を見ると、「Rows matched: 2」に対して「Changed: 1」となっています。これは、全2行が検索対象となり、そのうち該当する文字列を含む1行だけが実際に更新されたことを意味します。REPLACE()は一致しない行には影響を与えないため、無駄な更新が発生しないのもポイントです。

5. 削除後のデータ確認

もう一度SELECT文を実行して、更新結果を確認してみましょう。

mysql> select * from DemoTable1583;

出力は以下の通りです。

+------------------------------------------------------------+
| GameDetails                                                  |
+------------------------------------------------------------+
| ,<GamePrice>2000</GamePrice>                             |
| <GameName>=Lucky29</GameName>,<GamePrice>10000</GamePrice> |
+------------------------------------------------------------+
2 rows in set (0.00 sec)

1行目のレコードから「<GameName>=Candy</GameName>」の部分が削除され、残りの「,<GamePrice>2000</GamePrice>」のみが残っていることが確認できます。一方、2行目のレコードは対象外のため、元のまま変更されていません。

まとめ

MySQLでフィールド内の部分的なデータを削除する場合は、UPDATE文とREPLACE()関数を組み合わせるのが最もシンプルで効果的な方法です。構文は以下のようになります。

UPDATE テーブル名 SET カラム名 = REPLACE(カラム名, '削除したい文字列', '');

なお、大量のデータを扱う場合や頻繁に文字列操作を行う場合は、WHERE句で対象行を絞り込むことでパフォーマンスを向上させることができます。また、正規表現による柔軟な置換が必要な場合は、MySQL 8.0以降で利用可能なREGEXP_REPLACE()関数の活用も検討するとよいでしょう。

  1. 【MySQL】別のテーブルのデータを参照してテーブルを更新する方法(UPDATE+JOIN)

    MySQLでは、UPDATEコマンドとJOINを組み合わせることで、別のテーブルのデータを参照しながら、対象のテーブルを効率的に更新できます。本記事では、2つのテーブルを使った具体的なサンプルを通じて、その手順をわかりやすく解説します。 手順1:参照元のテーブルを作成する まず、氏名データを保持する1つ目のテーブル「demo54」を作成します。 mysql> create table demo54-> (-> firstName varchar(20),-> lastName varchar(20)-> );Query OK, 0 rows affected (

  2. MySQLであるテーブルから別のテーブルへデータを挿入する方法(INSERT INTO SELECT)

    MySQLであるテーブルから別のテーブルへデータをコピーして挿入したい場合は、INSERT INTO ... SELECT 文を使用します。この記事では、実際にテーブルを作成し、データを別テーブルへ移す手順をサンプルコードと実行結果とともにわかりやすく解説します。 1. 元となるテーブルを作成する まず、コピー元となるテーブル「DemoTable1」を作成します。カラムは Id(int型)と FirstName(varchar型)の2つです。 mysql> create table DemoTable1 -> ( -> Id int, -> Fi