SQLite | ゼロからはじめるSQL、30日で習得するSQLite:データ操作・設計 - Day16 更新

SQL SQLite
スポンサーリンク

Day16 前半

「データを書き換える」という、検索とはまったく違う“力”を手に入れる

Day1〜Day15 までは、
SELECT を中心に「データを読む」ことを学んできました。

Day16 からは、いよいよ データを“書き換える”側 に入ります。
今日のテーマは UPDATE(更新)

ここからは、
「間違ったデータを直す」
「状態を変更する」
「フラグを切り替える」
といった、アプリの裏側で必ず必要になる操作を扱います。

ただし、UPDATE は SELECT と違って、
一度実行すると元に戻せない(SQLite は基本的にトランザクションなしでは不可逆)
という性質があります。

だからこそ、
「正しく」「慎重に」「安全に」
扱うための考え方を、前半でしっかり固めていきます。


UPDATE の基本形

「どの行の」「どの列を」「どう書き換えるか」を宣言する

UPDATE の基本形はとてもシンプルです。

UPDATE テーブル名
SET 列名 = 新しい値
WHERE 条件;
SQL

この3つが UPDATE の本質です。

どのテーブルの
どの列を
どの行に対して書き換えるか

これを明確に指定します。


まずは最もシンプルな例

「1人のユーザーの名前を変更する」

次のような users テーブルがあるとします。

id | name       | age
---+------------+----
 1 | 山田太郎   | 25
 2 | 佐藤花子   | 19
 3 | 鈴木一郎   | 30

ここで、「id=2 のユーザーの名前を『佐藤花子』→『佐藤はな』に変更したい」とします。

UPDATE users
SET name = '佐藤はな'
WHERE id = 2;
SQL

これで、id=2 の行だけが書き換わります。

ここでのポイントは、
WHERE が“どの行を更新するか”を決める唯一の手段
だということです。


WHERE を書かない UPDATE は“爆弾”

「全行が書き換わる」という、初心者が必ず一度はやらかす事故

UPDATE の最大の落とし穴はこれです。

UPDATE users
SET age = 20;
SQL

WHERE がありません。

この場合、
users テーブルの全行の age が 20 に書き換わります。

SQLite は「本当に全行でいいの?」とは聞いてくれません。
書いた通りに実行します。

これを避けるために、プロは必ず

  1. UPDATE の前に
  2. 同じ WHERE 条件で
  3. SELECT を実行して確認する

という習慣を持っています。

例:

SELECT * FROM users
WHERE id = 2;
SQL

で対象を確認してから、

UPDATE users
SET name = '佐藤はな'
WHERE id = 2;
SQL

を実行する。

この「確認 SELECT → UPDATE」の流れは、
データを壊さないための最重要ルールです。


複数列をまとめて更新する

SET はカンマでつなげばいくつでも書ける

UPDATE では、複数の列を同時に書き換えることができます。

例:

UPDATE users
SET name = '山田太郎(改)',
    age  = 26
WHERE id = 1;
SQL

このように、
SET の中に複数の「列 = 値」を並べる
という書き方ができます。


条件を工夫して「複数行」を更新する

「20歳未満のユーザーの年齢を +1 する」など

UPDATE は、1行だけでなく複数行をまとめて更新できます。

例:

「20歳未満のユーザーの age を +1 したい」

UPDATE users
SET age = age + 1
WHERE age < 20;
SQL

ここでのポイントは、

SET の右側には計算式を書ける
ということです。

age = age + 1
は、「今の age に 1 を足す」という意味です。


UPDATE と NULL の関係

「NULL を埋める」「NULL にする」どちらもできる

UPDATE は NULL を扱うときにも使います。

例:
「住所が NULL のユーザーに、仮の住所を入れる」

UPDATE users
SET address = '不明'
WHERE address IS NULL;
SQL

逆に、
「住所を削除して NULL に戻す」
ということもできます。

UPDATE users
SET address = NULL
WHERE id = 3;
SQL

NULL を扱うときは、
= NULL ではなく IS NULL を使う
という SQL のルールを忘れないようにしましょう。


UPDATE のセキュリティ的な意味

「誤更新は“データ破壊”」という強烈なリスク

SELECT は読み取りなので、間違えても被害は軽いです。
しかし UPDATE は、間違えると データ破壊 になります。

WHERE を書き忘れる
条件が広すぎる
意図しない複数行が更新される

こうした事故は、実務では非常に多いです。

だからこそ、

UPDATE の前に SELECT で確認する
トランザクションを使う(後日扱う)
バックアップを取る

といった安全策が重要になります。

Day16 前半では、
UPDATE は“強い力”なので、慎重に扱う必要がある
という感覚だけ持っておいてくれれば十分です。


小さな練習イメージ

頭の中で、次の日本語を SQL にしてみてください。

id=3 のユーザーの年齢を 31 に変更したい。
20歳未満のユーザーの年齢を +1 したい。
住所が NULL のユーザーに「不明」と入れたい。

どれも、

UPDATE
SET
WHERE

の3つを組み合わせれば書けるはずです。


Day16 前半のまとめ

UPDATE は「どの行の」「どの列を」「どう書き換えるか」を指定する文。
WHERE を書かない UPDATE は全行が書き換わるため、最も危険な操作の一つ。
UPDATE の前に、同じ WHERE 条件で SELECT して確認するのがプロの習慣。
SET では複数列を同時に更新でき、計算式も書ける。
NULL を扱うときは IS NULL / IS NOT NULL を使う。
UPDATE はデータ破壊のリスクがあるため、慎重さが最重要。

後半では、
UPDATE と JOIN の組み合わせ、
UPDATE とサブクエリ、
「条件付きで一括更新する」実務パターン、
セキュリティ的に“危険な UPDATE”を避ける方法
まで扱って、より安全で強力な UPDATE の使い方を身につけていきます。

タイトルとURLをコピーしました