MySQL DELETE クエリ: テーブルから行を削除する方法

⚡ スマートサマリー

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

  • 🗑️ 基本理念: DELETE FROM `table_name` [WHERE condition] は行全体を削除し、削除された行数を返します。
  • ⚠️ 省略箇所: WHERE句を省略するとテーブル内のすべての行が削除されるため、実行前に必ずフィルタリングを行ってください。
  • 🎯 Targeted削除: WHERE `movie_id` = 18 は 1 つのレコードを削除しますが、WHERE `movie_id` IN (20,21) は 1 つのステートメントで複数のレコードを削除します。
  • 🔁 不可逆的なアクション: バックアップがないと削除されたデータは復元できないため、DELETEを実行する前にデータベースをバックアップしてください。
  • 📊 行レベルのスコープ: DELETE文は行全体を削除するだけで、単一の列の値をクリアするにはNULLを指定したUPDATE文が必要です。
  • <XNUMXxEXNUMX><XNUMXxEXNUMX><XNUMXxXNUMXA><XNUMXxXNUMX><XNUMXxXNUMXA>️️ DELETE、TRUNCATE、DROPの比較: DELETEは行をフィルタリングし、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 は、データとともに定義も削除してしまうためです。

よくあるご質問

開いているトランザクション内でのみ可能です。START TRANSACTIONを実行し、DELETEを実行してからROLLBACKを実行すると、元に戻すことができます。COMMIT後、または自動コミットが有効になっている場合、行は削除され、バックアップからのみ復元できます。

複数テーブルのDELETEを使用する 登録FROM キーワードの前に両方のテーブル名を指定してください。または、外部キーを ON DELETE CASCADE で定義すると、親行が削除されたときに子行も自動的に削除されます。

セーフアップデートモードはデフォルトで有効になっています MySQL ワークベンチキー列を使用しないWHERE句のDELETE文を拒否し、誤ってテーブル全体を削除してしまうことを防ぎます。この機能は、[編集] > [環境設定] > [SQLエディタ]で無効にできます。

はい。AIアシスタントは、平易な英語のリクエストをDELETE構文に変換し、WHERE句の説明もできます。ただし、AIモデルは実際のデータを見ることができないため、生成されたフィルタは必ず最初にSELECT文と照らし合わせて確認してください。

いいえ。AIにステートメントを作成させても、まずはバックアップコピーまたはステージングコピーで自分で実行してください。WHERE句が欠落しているとすべての行が削除され、トランザクションがコミットされると、どんなAIツールでもそれを元に戻すことはできません。