表の既存レコードの値を変更するSQLの命令。
UPDATE 文とは、表の既存レコードの値を変更する SQL の命令のことです。すでに表に入っている行の中身を、新しい値に書き換えます。
身近な例で考えると、会員名簿で1人の住所だけを書き直す作業に似ています。新しい人を増やすわけでも消すわけでもなく、すでにある記録の一部分を上書きする、というのが UPDATE の役割です。
上のツールで▶ボタンを押すと、WHERE で書き換える対象の行を選び、SET でその行の値だけが新しい値に変わる流れを確認できます。
UPDATE 文の基本の形は、書き換える内容を指定する SET と、対象を絞る WHERE でできています。
UPDATE 表 SET 列=値 WHERE 条件
それぞれの役割は次のとおりです。
・UPDATE 表:どの表を更新するかを指定する
・SET 列=値:どの列をどの値に書き換えるかを指定する(カンマ区切りで複数列もまとめて更新できる)
・WHERE 条件:どの行を更新するかを絞り込む
たとえば SET 部署='企画', 役職='主任' のように書けば、部署と役職を同時に更新できます。コンピュータは WHERE で対象行を見つけてから SET の書き換えを行う、という順番で処理します。
INSERT・SELECT・UPDATE・DELETE の4つをまとめてDML(=データ操作言語)と呼びます。UPDATE はそのうち「既存の行の値を変える」専用の命令です。
なぜ UPDATE が必要か。INSERT はゼロから新しい行を作るため、「今ある行の中身を直す」ことはできません。電話番号が変わった会員の情報を更新する、商品の在庫数を減らすなど、すでにある行の特定の列の値だけを書き換えたいときに UPDATE を使います。行は消えずそのまま残り、指定した列の値だけが上書きされます。
INSERT との大きな違いはWHERE で対象行を指定する必要がある点です。INSERT は「まだない行を追加する」ので対象を絞る必要はありませんが、UPDATE は「どの行を変えるか」を WHERE で教えなければなりません。WHERE を省くと全行が書き換わるため注意が必要です。
UPDATE の SET 句では、カンマ区切りで複数の列を1つの命令でまとめて更新できます。
UPDATE 社員 SET 名前='佐藤', 部署='企画' WHERE ID=2
なぜ1回にまとめられるのか。コンピュータはこの命令を受け取ると、WHERE で対象行を見つけてから SET に書いた列を一気に書き換えます。同じ行を変えるために UPDATE を2回実行する必要はなく、SET 句に 列=値, 列=値 と並べるだけで済みます。
大切なのは、WHERE で指定した列(ID など)は SET で変えないという点です。主キーの列はデータを一意に(=重複なく)識別するための列なので、UPDATE で書き換えると別のレコードと混同するトラブルのもとになります。「どの行を変えるか」は WHERE で、「何を変えるか」は SET で—と役割を明確に分けて書くことが大切です。
UPDATE で最も注意すべきなのが WHERE 句の書き忘れです。WHERE を省略すると、対象が表の全行になります。
・WHERE あり:WHERE ID = 2 なら ID=2 の行だけが書き換わる
・WHERE なし:UPDATE 社員 SET 部署='企画' だと全員の部署が企画になってしまう
これは、名簿の1人だけ住所を直すつもりが、全員の住所を同じ値に上書きしてしまうのと同じ事故です。一度書き換えた値は元に戻すのが大変なので、UPDATE を実行する前に「WHERE で対象を正しく絞れているか」を必ず確認することが大切です。同じ理由から、DELETE 文でも WHERE 句がとても重要になります。