章: 第1章: 基礎と環境構築
WHERE句なしのUPDATE/DELETE——あなたは一度やったことがありませんか?
UPDATE users SET name = 'admin' ——WHERE句を忘れた瞬間、全ユーザーの名前が書き変わります。更新系SQLのミスはデータ欠損に直結し、バックアップからの復元が必要になることも。
基本CRUDを「安全に書く習慣」とセットで身につけることが、実務での事故を防ぐ第一歩です。
安全なCRUDの書き方:3つの鉄則
更新系SQLを書くときに毎回意識すべき手順があります。
1. UPDATE/DELETE の前に SELECT で対象を確認する: WHERE id = 1 の条件が正しいか先に SELECT で確認する
2. トランザクションで包む: 複数更新は START TRANSACTION / ROLLBACK で安全網を張る
3. 影響行数を確認する: ROW_COUNT() で想定通りの件数が変更されたか確認する
危険な書き方 vs 安全な書き方
| 操作 | 危険な例 | 安全な例 |
| UPDATE | WHERE句なし(全件更新) | WHERE で主キーや一意列を指定 |
| DELETE | DELETE FROM users |
先に SELECT COUNT(*) WHERE ... で件数確認 |
| INSERT | 列名省略(列順依存) | 列名を明示して挿入 |
チェックポイント:
DELETE FROM users WHERE id = 1の前にSELECT * FROM users WHERE id = 1を実行して対象を目視確認するクセをつけましょう。特に本番DB作業では必須の手順です。
実際のコードのサンプル
INSERT INTO users (name, email) VALUES ('Yuki', 'yuki@example.com');
UPDATE users
SET name = 'Yusuke'
WHERE id = 1;
DELETE FROM users
WHERE id = 1;
まとめ & 次のステップ
INSERTは列名を明示して書く。列順依存の省略形は保守リスクが高いUPDATE/DELETEの前に必ずSELECTで対象を確認する習慣をつける- 複数更新はトランザクションで包むことで、途中失敗時のロールバックが可能になる
ROW_COUNT()で変更行数を確認し、想定外の更新を早期に検知する
次回は 「SELECTとWHERE条件の使い方」 を学びます。必要なデータを正確に取り出すための条件指定と、よくある落とし穴を確認します。