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

MySQL:サンプルテーブル「bar」から文字列「foo」を含むすべての行を削除する方法

MySQLで特定の文字列を含む行を削除する方法

テーブル「bar」から文字列「foo」を含むすべての行を削除するには、LIKE演算子を使用します。LIKE演算子とワイルドカード(%)を組み合わせることで、部分一致するレコードを柔軟に検索し、まとめて削除できます。

ここでは、サンプルテーブルを作成し、実際にデータを挿入してから削除までの一連の流れを順番に解説します。

サンプルテーブル「bar」の作成

まず、動作を確認するためのサンプルテーブル「bar」を作成しましょう。テーブル作成のクエリは以下の通りです。

mysql> create table bar
    -> (
    -> Id int NOT NULL AUTO_INCREMENT,
    -> Words longtext,
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (0.61 sec)

テストデータの挿入

次に、INSERTコマンドを使ってレコードを挿入します。文字列「foo」を含むデータと含まないデータを混ぜて登録することで、削除処理の効果がわかりやすくなります。

mysql> insert into bar(Words) values('Javafoo');
Query OK, 1 row affected (0.14 sec)
mysql> insert into bar(Words) values('fooMySQL');
Query OK, 1 row affected (0.19 sec)
mysql> insert into bar(Words) values('Introductiontofoo C and C++');
Query OK, 1 row affected (0.22 sec)
mysql> insert into bar(Words) values('Introduction to Node.js');
Query OK, 1 row affected (0.19 sec)
mysql> insert into bar(Words) values('Introduction to Hibernate framework');
Query OK, 1 row affected (0.17 sec)

登録済みレコードの確認

SELECT文ですべてのレコードを表示して、現在のテーブルの状態を確認します。

mysql> select *from bar;

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

+----+-------------------------------------+
| Id | Words                               |
+----+-------------------------------------+
|  1 | Javafoo                             |
|  2 | fooMySQL                            |
|  3 | Introductiontofoo C and C++         |
|  4 | Introduction to Node.js             |
|  5 | Introduction to Hibernate framework |
+----+-------------------------------------+
5 rows in set (0.00 sec)

文字列「foo」を含む行の削除クエリ

ここで本題となるDELETE文です。LIKE演算子を使って、文字列「foo」を含むすべての行を削除します。

mysql> delete from bar where Words like '%foo'
    -> or Words like '%foo%'
    -> or Words like 'foo%';
Query OK, 3 rows affected (0.20 sec)

ポイント: 実は Words like '%foo%' の1つの条件だけで、前方一致・中間一致・後方一致のすべてのパターンをカバーできます。そのため、以下のようによりシンプルに記述することも可能です。

mysql> delete from bar where Words like '%foo%';

削除後のテーブル確認

削除処理の実行後、再度SELECT文でテーブルの内容を確認してみましょう。

mysql> select *from bar;

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

+----+-------------------------------------+
| Id | Words                               |
+----+-------------------------------------+
|  4 | Introduction to Node.js             |
|  5 | Introduction to Hibernate framework |
+----+-------------------------------------+
2 rows in set (0.00 sec)

出力結果を見ると、文字列「foo」を含んでいたレコード(Id 1〜3)がすべて削除され、「foo」を含まない2件のレコードだけが残っていることがわかります。

まとめ

MySQLで特定の文字列を含む行を一括削除するには、DELETE文とLIKE演算子を組み合わせます。ワイルドカード「%」を文字列の前後に付けることで、部分一致検索が可能になります。

なお、本番環境でDELETE文を実行する際は、誤削除を防ぐために、まず同じ条件でSELECT文を実行して対象レコードを事前に確認し、必要に応じてバックアップを取得しておくことをおすすめします。

  1. MySQLのMATCH...AGAINSTを使って特定のカラムに文字列を含む行を選択する方法

    MySQLで特定のカラムに文字列を含む行を検索したい場合、FULLTEXTインデックスと MATCH() ... AGAINST() 構文を組み合わせることで、高速な全文検索が可能になります。ここでは、実際にテーブルを作成し、データを挿入して、MATCH...AGAINSTによる検索を行う手順を解説します。1. テーブルの作成まず、検索対象となるテーブルを作成します。mysql> create table DemoTable1833 ( Name varchar(20) ); Query OK, 0 rows affected (0.00 sec)2. FU

  2. MySQLでテーブル内の特定の行だけを削除する方法|NOT IN()を使った実践テクニック

    MySQLで特定の行以外を一括削除したい場合、NOT IN() 演算子を使用すると簡単に実現できます。NOT IN() は「指定した値のリストに含まれない行」を対象にできるため、残したい行のIDを列挙すれば、それ以外の行だけを効率よく削除できます。この記事では、サンプルテーブルを作成し、実際にデータを挿入してから、NOT IN() を使って特定の行のみを削除する手順を解説します。1. サンプルテーブルの作成まずは、StudentId を自動採番(AUTO_INCREMENT)に設定したテーブルを作成します。AUTO_INCREMENT=101 を指定することで、IDは101から順番に割り振られ