MySQL でデータの削除 (DELETE)
ここでは MySQL でテーブルのデータを削除 (DELETE) する方法をご説明します。
サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。
DELETE 文でテーブルのデータを削除する
MySQL でテーブルのデータを削除するには DELETE 文を使います。
テーブルのレコードを更新する、基本の DELETE 文の構文は次の通りです。
DELETE
FROM テーブル名
WHERE 条件文;
テーブルの条件文に合致するレコードを削除します。
デフォルトでは Safe Updates モードが有効化されていて、WHERE 句をつけなかったり、WHERE 句の条件文にキーカラムを使わないとエラーになります。
WHERE 句は必須ではありませんが、WHERE 句をつけないと、Safe Updates モードを OFF にしている場合は、テーブルの全レコードが削除されてしまうのでお気をつけください。
MySQL の Safe Updates モードとは何かと、Safe Updates モードを無効化する方法が知りたい方はこちらをご覧ください。
それでは DELETE 文 を使って、テーブルのデータを削除してみましょう。
次のような students テーブル と exam_results テーブルがあります。
students テーブルから students_id = 6 のレコードを削除するには、次のような DELETE 文で削除できます。
DELETE
FROM students
WHERE student_id = 6;
上の DELETE 文を実行して、students テーブルの中身を確認します。
students テーブルから students_id = 6 のレコードが削除されていますね。
同じように students_id = 5 のレコードを削除してみましょう。
DELETE
FROM students
WHERE student_id = 5;
上の DELETE 文を実行すると次のようなエラーになります。
このエラーの原因は、exam_results テーブルに外部キー制約があり students テーブルの student_id を参照していて、exam_results テーブルに student_id = 5 のデータが存在しているからです。
こういう時は先に外部キーがついているテーブルのデータを削除してからでないと、参照されているテーブルのデータが削除できません。
外部キーを定義する際に ON DELETE CASCADE を付けておけば、参照されているテーブル (students) のデータが削除された時に自動的に外部キーのついているテーブル (exam_results) のデータも消してくれます。ですが、私は気づかないうちにデータが削除されてしまうよりエラーが出たほうがいいので、自分でコントロールするようにしています。
先に外部キーのついている exam_results テーブルの student_id = 5 のレコードを削除してから、students テーブルの student_id = 5 のレコードを削除します。
DELETE
FROM exam_results
WHERE student_id = 5;
DELETE
FROM students
WHERE student_id = 5;
上の DELETE 文を実行して、students と exam_results テーブルの中身を確認します。
今度はエラーにならず、students と exam_results テーブルから students_id = 5 のレコードが削除されています。
以上、MySQL でテーブルのデータを削除 (DELETE) する方法をご説明しました。
複数のテーブルを結合 (JOIN) してデータを削除 (DELETE)する方法が知りたい方はこちらをご覧ください。