第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)