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文を実行して対象レコードを事前に確認し、必要に応じてバックアップを取得しておくことをおすすめします。
-
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
-
MySQLでテーブル内の特定の行だけを削除する方法|NOT IN()を使った実践テクニック
MySQLで特定の行以外を一括削除したい場合、NOT IN() 演算子を使用すると簡単に実現できます。NOT IN() は「指定した値のリストに含まれない行」を対象にできるため、残したい行のIDを列挙すれば、それ以外の行だけを効率よく削除できます。この記事では、サンプルテーブルを作成し、実際にデータを挿入してから、NOT IN() を使って特定の行のみを削除する手順を解説します。1. サンプルテーブルの作成まずは、StudentId を自動採番(AUTO_INCREMENT)に設定したテーブルを作成します。AUTO_INCREMENT=101 を指定することで、IDは101から順番に割り振られ