第9章 データベース連携 / 第2回 模擬試験
PHPのSQL文(DELETE文)に関する次の記述のうち、正しいものはどれか。
`DELETE FROM users;`(WHERE句なし)を実行すると、構文エラーになり実行できない。
`DELETE`文はテーブル自体を削除する。
`DELETE FROM users WHERE id = 1;`は、`id`が1のレコードのみを削除する。
正解
`DELETE`文はレコードを削除せず、非表示にするだけである。
解説
`DELETE FROM users WHERE id = 1;`のように`WHERE`句で条件を指定すると、条件に合致するレコード(この場合は`id`が1のレコード)のみが削除されます。
他の選択肢が誤りである理由は次の通りです。
・`DELETE FROM users;`のように`WHERE`句を省略しても構文エラーにはならず、正常に実行されます。ただしこの場合は条件による絞り込みがないため、テーブル内の「全レコード」が削除されてしまいます(構文としては有効なので、実務では特に注意が必要な書き方です)。
・テーブル自体(構造)を削除する命令は`DROP TABLE`です。`DELETE`はレコード(データ)を削除するだけで、テーブルの定義は残ります。
・`DELETE`文は実際にレコードを削除します。削除せず非表示にするだけの「論理削除」を行いたい場合は、`is_deleted`のようなフラグ列を`UPDATE`で更新する設計を別途行う必要があります。
例:
```
DELETE FROM users WHERE id = 1; -- id=1のレコードのみ削除
DELETE FROM users; -- WHERE句省略。全レコードが削除される(構文エラーにはならない)
```
`UPDATE`文と同様、`DELETE`文も`WHERE`句を書き忘れると意図せず全件が対象になってしまうため、実行前に対象範囲を`SELECT`で確認する習慣が推奨されます。
(参照: 独習PHP 第4版 第9章 データベース連携 9.2.2節 SQLの基本 p.417〜424)