データベース ・ Chapter 5
書き込み——INSERT・UPDATE・DELETE
記事 ・ 冒頭を無料公開中
ここまでは読み取り(READ)をメインに扱いました。この章では、データを書き込む3つの命令を学びます——INSERT(追加)、UPDATE(書き換え)、DELETE(削除)の3つです。文法自体はSELECTより簡単です。ただしこの3つはデータを実際に変えてしまう命令なので、事故の話がセットになります。実務で語り継がれる大事故も、この章の実験場で安全に体験してもらいます。
概要
シードは前章と同じ(users 6人+products 7件)です。
書き込みには、ひとつ作法があります。書き込んだら、SELECTで確認するということです。変更は黙って行われるので、結果を自分の目で見るまで完了ではありません。この教材の実行欄は毎回シードから作り直されるため、「書き込み+確認のSELECT」を同じ欄に続けて書きます。
INSERT 行を追加する
INSERT INTO テーブル名 (列1, 列2) VALUES (値1, 値2);
INSERTは「このテーブルの、この列に、この値の行を追加して」という指示を出します。列の並びと値の並びが対応します。
▶ 実行してみよう
最終行に山本さんが増えています。また、idを指定していないことに注目してください。idはserial(自動採番)なので、データベースが勝手に7を振ってくれました。主キーを人間が管理しない方針です。複数行の一括追加は、VALUESをカンマで並べます。
なお、NOT NULLの列(name)を指定せずにINSERTするとエラーになります。INSERT INTO users (age) VALUES (99); に書き換えて、設計が不正データを弾く瞬間を一度見ておいてください。
UPDATE 行を書き換える
UPDATE テーブル名 SET 列 = 値 WHERE 条件;
UPDATEは「条件に合う行の、この列を、この値にして」という指示を出します。
▶ 実行してみよう
SET
SETはカンマで複数列を一度に書き換えられます: SET price = 5980, stock = 10。また、今の値を使った計算もできます。
UPDATE products SET stock = stock - 1 WHERE name = 'キーボード';
上記だと、「今の在庫から1引く」という命令文になります。商品が1個売れたときの在庫更新です。
全行書き換え事故
さて、この章の本題です。UPDATEのWHEREを書き忘れたら何が起きるか。文法上、WHEREは省略可能です。ただし省略したUPDATEは全行に適用されます。
▶ 実行してみよう(事故を起こす)
このチャプターの続きは受講生限定です
本文の残り、図解・実行できるコードブロック・演習はプラン加入後に読めます。