INSERT/UPDATE/DELETEとは?WHEREの書き忘れと、TRUNCATE

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

INSERT/UPDATE/DELETEとは(全体像)

INSERT・UPDATE・DELETEとは、データベースの中身を変える、3つのSQL命令のことだ。データを取り出すSELECTが「見る」命令なら、この3つは「書き換える」命令にあたる(あわせてDMLという)。

ここで一番のポイント。この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つの命令の役割)

📝 オリジナル問題 1 更新系SQLの役割

INSERT・UPDATE・DELETEに関する次の記述のうち、最も適切なものはどれか。

  1. 社員の出退勤を記録して、毎月の給与を計算するためのしくみだ
  2. それぞれ、行の追加・更新・削除を行うSQL命令のことである
  3. 取引先へ毎月の請求書を郵送する、決まった事務作業のことを指す
  4. 完成したシステムを宣伝して、より多く売るための広告活動である
エーアイコアラ
エーアイコアラ 解答・解説

解答は 2 です。

INSERTは行の追加、UPDATEは行の更新、DELETEは行の削除を行う、DMLの更新操作なのです。データを書き換える命令なります。

選択肢1は給与計算、選択肢3は請求書の事務、選択肢4は広告で、どれも違うのです。

選択肢判定理由
1給与計算のしくみではない
2追加・更新・削除の命令で正しい
3請求書の事務の話
4広告活動ではない

オリジナル問題2(WHERE忘れの危険)

📝 オリジナル問題 2 WHERE忘れの危険

UPDATE・DELETEのWHEREに関する次の記述のうち、最も適切なものはどれか。

  1. 社員の給与を計算するときだけ、必要だとされているものである
  2. 取引先への請求書を郵送するときだけ、必要だとされているのだ
  3. 書き忘れると、表の全行が更新・削除されてしまう危険があるものだ
  4. WHEREは、書いても書かなくても結果は同じだとされているのだ
エーアイコアラ
エーアイコアラ 解答・解説

解答は 3 です。

WHEREを書き忘れると、対象が指定されず、表の全行が更新・削除されるのです。だから慎重に指定するなります。

選択肢1の給与、選択肢2の請求書、選択肢4の「結果は同じ」は、いずれも違うのです。

選択肢判定理由
1給与計算のときだけではない
2請求書のときだけではない
3全行が対象になる危険で正しい
4書かないと全行が対象になる

オリジナル問題3(DELETEとTRUNCATE)

📝 オリジナル問題 3 DELETEとTRUNCATEの違い

DELETEとTRUNCATEの違いに関する次の記述のうち、最も適切なものはどれか。

  1. DELETEは取り消せるが、TRUNCATEは取り消せないものである
  2. 社員の給与を計算するときだけ、違いが出るとされているものだ
  3. 取引先への請求書の枚数しだいで、違いが決まるとされているのだ
  4. DELETEもTRUNCATEも、まったく同じものだとされているのである
エーアイコアラ
エーアイコアラ 解答・解説

解答は 1 です。

DELETEは取り消し(ROLLBACK)ができるが、TRUNCATEは全行を高速に消して取り消せないのです。役割が違うなります。

選択肢2の給与、選択肢3の請求書、選択肢4の「まったく同じ」は、いずれも違うのです。

選択肢判定理由
1DELETEは取り消せTRUNCATEは不可で正しい
2給与計算で違いが出るのではない
3請求書の枚数で決まるのではない
4取り消せるかどうかが違う

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る