第04回: INSERT/UPDATE/DELETEの基本 — データ操作のミスをゼロにする書き方

章: 第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条件の使い方」 を学びます。必要なデータを正確に取り出すための条件指定と、よくある落とし穴を確認します。

Related Articles