MySQL DELETE クエリ: テーブルから行を削除する方法
⚡ スマートサマリー
MySQL DELETEクエリは、テーブルから不要になった行を削除し、影響を受けた行数を返します。このリソースでは、DELETE構文、WHERE句によるフィルタリング、IN句を使用した複数行の削除、およびより安全な代替手段であるTRUNCATEとDROPについて説明します。

DELETEクエリとは何ですか?
その MySQL DELETE DELETE文は、データベーステーブルから不要になった行を削除するために使用されます。テーブルから行全体を削除し、削除された行の数を返します。DELETE文は、データベースから一時データや不要になったデータを削除する必要がある場合に便利です。
DELETE クエリでは MySQL 1回の実行でテーブルから複数の行を削除できます。これは、データベーステーブルから大量の行を削除する場合に非常に便利です。
一度削除された行は復元できません。データを削除する前に必ずデータベースのバックアップを作成してください。そうすれば、必要に応じて後でデータベースを復元して確認できます。
行を削除する方法 MySQL
ステートメントの目的が明確になったので、次のステップは構文です。行を削除するには、 MySQLでは、DELETE FROM ステートメントが使用されます。
DELETE FROM `table_name` [WHERE condition];
ここ:
- `table_name` から削除します 指示 MySQL サーバーが指定されたテーブルから行を削除します。
- [WHERE条件] これはオプションであり、DELETEクエリによって影響を受ける行数を制限するフィルタを適用するために使用されます。
Status WHERE句 では使用されません MySQL DELETEクエリ、次に を 指定されたテーブルの行が削除されます。
⚠️ 警告: まずフィルターをSELECTとして実行します。削除しようとしている行が正確に返された場合、対応するDELETEは安全です。完全な構文は、 MySQL 削除ステートメントマニュアル.
の例 MySQL クエリの削除
次のセクションでは、小さなデータセットを作成し、そこからデータを削除します。
ステップ1:サンプルデータを挿入する
SQLのDELETE文についてより詳しく説明する前に、まずはサンプルデータをmoviesテーブルに挿入してみましょう。
INSERT INTO `movies` (`title`, `director`, `year_released`, `category_id`) VALUES ('The Great Dictator', 'Charlie Chaplin', 1940, 7); INSERT INTO `movies` (`title`, `director`, `category_id`) VALUES ('sample movie', 'Anonymous', 8); INSERT INTO `movies` (`title`, `director`, `year_released`, `category_id`) VALUES ('movie 3', 'John Brown', 1920, 8);
上記のスクリプトを実行すると、映画テーブルに3本の映画が追加されます。先に進む前に、テーブル内のすべての映画を一覧表示してみましょう。
SELECT * FROM `movies`;
上記のスクリプトを実行すると、以下の結果が得られます。新しく挿入された3行がハイライト表示されています。
| 映画ID | タイトル | ディレクター | リリース年 | カテゴリ ID |
|---|---|---|---|---|
| 1 | パイレーツ・オブ・カリビアン 4 | ロブ·マーシャル | 2011 | 1 |
| 2 | サラ・マーシャルを忘れる | ニコラス・ストーラー | 2008 | 2 |
| 3 | X-メン | NULL | 2008 | NULL |
| 4 | Code 名前はブラック | エドガー・ジムズ | 2010 | NULL |
| 5 | ダディーズ・リトル・ガールズ | NULL | 2007 | 8 |
| 6 | 天使と悪魔 | NULL | 2007 | 6 |
| 7 | ダ・ヴィンチ Code | NULL | 2007 | 6 |
| 9 | Honey moonERS | ジョン・シュルツ | 2005 | 8 |
| 16 | 67% 有罪 | NULL | 2012 | NULL |
| 18 | チャップリンの独裁者 | チャーリー·チャップリン | 1940 | 7 |
| 19 | サンプル動画 | 匿名の | NULL | 8 |
| 20 | 映画3 | ジョン·ブラウン | 1920 | 8 |
ステップ2:1行を削除する
Myflixのビデオライブラリが「独裁者」のレンタルを中止し、データベースから削除したいとします。その映画のIDは18なので、以下のスクリプトはその行を削除します。
DELETE FROM `movies` WHERE `movie_id` = 18;
上記のスクリプトを実行すると、 MySQL ワークベンチ Myflixデータベースに対して、IDが18の映画をテーブルから削除します。
それでは、映画テーブルの現在の状態を確認してみましょう。
SELECT * FROM `movies`;
| 映画ID | タイトル | ディレクター | リリース年 | カテゴリ ID |
|---|---|---|---|---|
| 1 | パイレーツ・オブ・カリビアン 4 | ロブ·マーシャル | 2011 | 1 |
| 2 | サラ・マーシャルを忘れる | ニコラス・ストーラー | 2008 | 2 |
| 3 | X-メン | NULL | 2008 | NULL |
| 4 | Code 名前はブラック | エドガー・ジムズ | 2010 | NULL |
| 5 | ダディーズ・リトル・ガールズ | NULL | 2007 | 8 |
| 6 | 天使と悪魔 | NULL | 2007 | 6 |
| 7 | ダ・ヴィンチ Code | NULL | 2007 | 6 |
| 9 | Honey moonERS | ジョン・シュルツ | 2005 | 8 |
| 16 | 67% 有罪 | NULL | 2012 | NULL |
| 19 | サンプル動画 | 匿名の | NULL | 8 |
| 20 | 映画3 | ジョン·ブラウン | 1920 | 8 |
注:
- IDが18の映画は、クエリ結果セットに含まれなくなりました。
- DELETE ではテーブルから単一の列を削除することはできません。このステートメントは行全体を削除します。1 つのフィールドをクリアするには、 UPDATEクエリ これにより、その列がNULLに設定されます。
ステップ3:IN句を含む複数行を削除する
削除したい映画のリストがあるとします。行ごとにステートメントを実行する代わりに、WHERE句とIN演算子を組み合わせることができます。
DELETE FROM `movies` WHERE `movie_id` IN (20,21);
上記のスクリプトを実行すると、映画テーブルからIDが20と21の映画が一度に削除されます。
DELETE vs TRUNCATE vs DROP in MySQL
DELETE はデータを削除する唯一の方法ではありません MySQL初心者は、より速いコマンドの方が適している場合でも、ついそれを使ってしまうことが多いので、以下の表では3つの削除コマンドを比較しています。
| 機能 | DELETE | 切り捨てる | DROP |
|---|---|---|---|
| コマンドの種類 | DML | DDL | DDL |
| WHERE句 | サポート | サポートされていません | サポートされていません |
| 削除されるもの | 選択された行 | すべての行 | 行とテーブル構造 |
| ロールバック | トランザクション内で可能 | 不可能(暗黙のコミット) | 不可能(暗黙のコミット) |
| 自動増加 | カウンターは保持されます | カウンターは開始値にリセットされます | カウンターはテーブルと一緒に取り外されます |
| 大型テーブルでのスピード | ゆっくり(一行ずつ) | 非常に高速 | 非常に高速 |
フィルターが必要な場合やロールバック機能が必要な場合は、DELETE を使用してください。 テーブルの切り捨て テーブルを素早く空にして、AUTO_INCREMENT カウンターをリセットしたい場合に使用します。DROP は、テーブル自体が不要になった場合にのみ使用してください。DROP は、データとともに定義も削除してしまうためです。
