INSERT/UPDATE/DELETEとは(全体像)
INSERT・UPDATE・DELETEとは、データベースの中身を変える、3つのSQL命令のことだ。データを取り出すSELECTが「見る」命令なら、この3つは「書き換える」命令にあたる(あわせてDMLという)。
- INSERT … 行を追加する(新しいデータを入れる)
- UPDATE … 行を更新する(すでにあるデータを書き換える)
- DELETE … 行を削除する(データを消す)
ここで一番のポイント。この3つは、それぞれ役割が違う。「追加・更新・削除は、ぜんぶ同じ命令でやる」と思い込むと誤りで、入れるならINSERT、書き換えるならUPDATE、消すならDELETEと分かれている。
詳しく:WHEREの書き忘れと、TRUNCATE
ここが心臓部。ポイントを表で押さえよう。
更新系SQLのポイント
| 項目 | やさしい意味 |
|---|---|
| INSERT | 行を追加する(新しいデータを入れる) |
| UPDATE | 行を更新する(WHEREで対象を指定) |
| DELETE | 行を削除する(WHEREで対象を指定) |
| WHERE忘れ | 対象を指定せず、全行が対象になる危険 |
UPDATEとDELETEを使うときは、WHEREで「どの行を対象にするか」を必ず指定する。たとえば「社員番号が100番の行だけ更新」のように絞り込む。
ここで一番のポイント。WHEREを書き忘れると、表の全行が更新・削除される。「WHEREは省いても大丈夫」と思い込むと誤りで、消したくない行まで消えてしまう。だから、WHEREは慎重に指定する。
なお、全行をまとめて高速に消すTRUNCATEという命令もある。DELETEは取り消し(ROLLBACK)ができるが、TRUNCATEは取り消せない。
わかりやすく言い換えると
身近なたとえで整理しよう。
3つの命令は、「INSERT=書き足す・UPDATE=書き直す・DELETE=消しゴムで消す」イメージ。要するに、ノートへの書き込み方の違いだ。
WHEREの書き忘れは、「『どの行か』を言わずに『消して』と命令して、ページ全部を消してしまう」こと。つまり、対象を決めないと全部が対象になる。
DELETEとTRUNCATEの違いは、「DELETEは消した後でも取り消せる、TRUNCATEは全行を一気に消して取り消せない」こと。
試験のツボ
🔴 一番出る:3つの命令の役割
①INSERT=行を追加、UPDATE=行を更新、DELETE=行を削除
②3つあわせて、DMLの更新操作
🔴 次に出る:WHERE忘れの危険
①WHEREで対象の行を指定しないと、全行が対象になる
②UPDATE・DELETEのWHEREは慎重に指定する
🟡 押さえると安定:DELETEとTRUNCATE
①DELETEは取り消し(ROLLBACK)ができる
②TRUNCATEは全行を高速に消すが、取り消せない
よくある間違い
①「追加・更新・削除は、ぜんぶ同じ命令でやる」→ ✗ INSERTは追加、UPDATEは更新、DELETEは削除。命令が分かれている。
②「UPDATEやDELETEのWHEREは、省いても大丈夫だ」→ ✗ WHEREを書き忘れると、全行が更新・削除される。慎重に指定する。
③「DELETEとTRUNCATEは、まったく同じものだ」→ ✗ DELETEは取り消せるが、TRUNCATEは取り消せない。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(3つの命令の役割)
INSERT・UPDATE・DELETEに関する次の記述のうち、最も適切なものはどれか。
- 社員の出退勤を記録して、毎月の給与を計算するためのしくみだ
- それぞれ、行の追加・更新・削除を行うSQL命令のことである
- 取引先へ毎月の請求書を郵送する、決まった事務作業のことを指す
- 完成したシステムを宣伝して、より多く売るための広告活動である
解答は 2 です。
INSERTは行の追加、UPDATEは行の更新、DELETEは行の削除を行う、DMLの更新操作なのです。データを書き換える命令なります。
選択肢1は給与計算、選択肢3は請求書の事務、選択肢4は広告で、どれも違うのです。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 給与計算のしくみではない |
| 2 | ✓ | 追加・更新・削除の命令で正しい |
| 3 | ✗ | 請求書の事務の話 |
| 4 | ✗ | 広告活動ではない |
オリジナル問題2(WHERE忘れの危険)
UPDATE・DELETEのWHEREに関する次の記述のうち、最も適切なものはどれか。
- 社員の給与を計算するときだけ、必要だとされているものである
- 取引先への請求書を郵送するときだけ、必要だとされているのだ
- 書き忘れると、表の全行が更新・削除されてしまう危険があるものだ
- WHEREは、書いても書かなくても結果は同じだとされているのだ
解答は 3 です。
WHEREを書き忘れると、対象が指定されず、表の全行が更新・削除されるのです。だから慎重に指定するなります。
選択肢1の給与、選択肢2の請求書、選択肢4の「結果は同じ」は、いずれも違うのです。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 給与計算のときだけではない |
| 2 | ✗ | 請求書のときだけではない |
| 3 | ✓ | 全行が対象になる危険で正しい |
| 4 | ✗ | 書かないと全行が対象になる |
オリジナル問題3(DELETEとTRUNCATE)
DELETEとTRUNCATEの違いに関する次の記述のうち、最も適切なものはどれか。
- DELETEは取り消せるが、TRUNCATEは取り消せないものである
- 社員の給与を計算するときだけ、違いが出るとされているものだ
- 取引先への請求書の枚数しだいで、違いが決まるとされているのだ
- DELETEもTRUNCATEも、まったく同じものだとされているのである
解答は 1 です。
DELETEは取り消し(ROLLBACK)ができるが、TRUNCATEは全行を高速に消して取り消せないのです。役割が違うなります。
選択肢2の給与、選択肢3の請求書、選択肢4の「まったく同じ」は、いずれも違うのです。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | DELETEは取り消せTRUNCATEは不可で正しい |
| 2 | ✗ | 給与計算で違いが出るのではない |
| 3 | ✗ | 請求書の枚数で決まるのではない |
| 4 | ✗ | 取り消せるかどうかが違う |
まとめ
押さえどころ
- 🔴 3つの命令 = INSERT(行を追加)・UPDATE(行を更新)・DELETE(行を削除)。あわせてDMLの更新操作。
- 🔴 WHERE忘れの危険 = WHEREで対象の行を指定しないと、表の全行が更新・削除される。慎重に指定する。
- 🟡 DELETEとTRUNCATE = DELETEは取り消し(ROLLBACK)ができる、TRUNCATEは全行を高速に消すが取り消せない。
次に学ぶ
- SELECT文(集約関数) ── データを取り出すSQL命令。更新系とあわせて、DMLの基本になる。
- トランザクション・ACID ── ひとまとまりの処理。更新の取り消し(ROLLBACK)とも深く関わる。
執筆: SikakuQuest編集部