データベースやテーブルを削除するDROP文はほとんど使用することはないかもしれませんが、データを削除するDELETE文を使用することはあると思います。
今回はデータを削除するDELETE文について解説していきます。
記事後半では、実際にデータは削除せずにDELETE状態にする【論理削除】についても解説していますので、是非最後まで目を通してくださいね。
文字を読むのはめんどくさい…という方はYouTube動画でも詳しく解説していますので、聞き流してみてくださいね。
▼youtube動画はこちら
YouTube動画
【MySQL】データの追加・更新・削除について、初心者にもわかりやすく解説しています!
DELETE文の書き方
DELETE FROM テーブル名 WHERE 条件;
DELETE文での削除
全てのデータの削除
条件の指定が無い場合、テーブル内の全てのデータが削除されます。
DELETE FROM players;
MySQL Workbenchを使用してSQL文を実行する場合、条件の指定なしで実行しようとするとエラーを出して教えてくれます。
MySQL Workbenchのおかげで助かったわ
指定したカラムのデータの削除
idが3番のデータを削除したい場合は、WHERE句の後に id = 3 を記述します。
DELETE FROM players
WHERE id = 3;
テーブルの中身の削除
テーブルの中身が多い場合、TRUNCATE文でテーブルの中身を空にします。
DELETEが1行ずつ削除するのに対してTRUNCATEは一気に全データを削除することができます。
AUTO_INCREMENT はリセットされるため、新たに1番からid番号を振ることができます。
TRUNCATE TABLE players;
データベースやテーブルはDROPで削除
データベースの削除は
— DBを削除
DROP DATABASE baseball_db;
テーブルの削除は
— テーブルの削除
DROP TABLE teams;
DELETE削除した場合のAUTO_INCREMENT
カラムを指定せずに1行分のデータを追加する場合は、全てのカラムの情報を記述しなければなりません。
データが多くなってくるとid番号が何番かいちいち探すのは面倒ですよね。
何番までデータを入れたのかid番号がわからなくなった!
id番号のようにAUTO_INCREMENTの設定をしている場合は、そのカラムの情報はNULLと記述しても大丈夫です。
自動的に番号が追加されます。
INSERT INTO teams VALUES
(NULL, ‘ロッテ’, ‘千葉’, ‘1970-01-10’),
(NULL, ‘ホークス’, ‘福岡’, ‘1974-10-10’),
(NULL, ‘ライオンズ’, ‘所沢’, ‘1971-10-15’);
データを削除して欠番の場合のAUTO_INCREMENT
例えば下図のように3番のデータを削除し、欠番となったとします。
次にデータを番号を指定せずに追加した場合、そのデータは新たなid番号、下図のように5番に追加されます。
データの整合性を保つため、SQLはこのような仕様になっています。
削除できたかSHOW TABLESで確認
— テーブル内の全データの取得
SELECT * FROM players;
データを復活できるようにする論理削除
DELETE文でデータを削除してしまった場合、そのデータを元に戻すことはできません。
データをDELETE文で物理的に削除するのではなく、削除した体をとる、データ自体は残しておくが使えないようにする、これを【論理削除】といいます。
カラムで状態を管理する
下図のように状態を管理するstatusというカラムを作成し、DELETEという状態にしておきます。
DELETE状態以外のカラムのみ表示するようにしたり、ログインであればDELETE状態のカラムを使用できなくすることで、DELETEと同様の状態にすることができます。
2年以内ならアカウントが復活できる…っていうのはこれだったんだな
DELETE削除の際の注意点!
MySQLで行った作業はその場で保存されていきます。
Ctrl+Zで戻る、ということはできません。
MySQL WorkbenchであればWHERE句を書き忘れた場合、エラーを出して止めてくれます。
慣れるまではMySQL Workbenchで作業して、SQL文をコードに貼り付けるという使い方をしても良いかもしれませんね。
【MySQL】データの削除(DELETE文)まとめ
今回はデータの削除DELETE文を解説しました。
練習で色々データを入れたり消したりしていると、id番号がどんどん増えていってしまいますね(汗
そんな時は一旦TRUNCATE TABLE 文でテーブルを空にすることもできますよ!