はじめに
SQLの基本操作であるSELECT(取得)、UPDATE(更新)、DELETE(削除)は、データベースを扱う上で避けて通れない最重要コマンドである。文法自体はシンプルだが、実務では「WHERE句のつけ忘れによる全件更新・全件削除」という事故が後を絶たない。
本記事では、それぞれの基本構文と合わせて、現場で身につけておくべき安全な運用習慣を整理する。
※本記事のSQL例はMySQLを前提としている。
SELECT(データ取得)
-- 基本形
SELECT カラム名 FROM テーブル名 WHERE 条件;
-- 例:年齢が20歳以上のユーザーを取得
SELECT id, name, age FROM users WHERE age >= 20;
-- 全カラム取得
SELECT * FROM users;
-- 並び替え・件数制限
SELECT * FROM users ORDER BY created_at DESC LIMIT 10;SELECTはデータを読み取るだけの操作であり、他のコマンドと比べて安全性は高い。ただし次の点には注意したい。
SELECT *は開発中の確認作業には便利だが、本番コードでは必要なカラムだけを明示的に指定するのが望ましい。パフォーマンスと可読性の両面でメリットがある。WHERE句を忘れると全件取得してしまう。件数の多いテーブルでは処理負荷にも影響するため注意する。
UPDATE(データ更新)
-- 基本形
UPDATE テーブル名 SET カラム名 = 値 WHERE 条件;
-- 例:id=5のユーザーのメールアドレスを変更
UPDATE users SET email = 'new@example.com' WHERE id = 5;
-- 複数カラムを同時更新
UPDATE users SET name = '田中太郎', age = 30 WHERE id = 5;UPDATEで最も重要なのはWHERE句を絶対に忘れないことである。WHERE句がないと、テーブル内の全レコードが同じ値に更新されてしまう。
実行前には、同じ条件でSELECTを実行し、対象となる件数や内容を確認する習慣をつけておくと事故を防げる。
SELECT * FROM users WHERE id = 5; -- まずはこれで対象を確認
UPDATE users SET ... WHERE id = 5; -- 確認後に実行
DELETE(データ削除)
-- 基本形
DELETE FROM テーブル名 WHERE 条件;
-- 例:id=5のユーザーを削除
DELETE FROM users WHERE id = 5;
DELETEはUPDATE以上に慎重な扱いが求められるコマンドである。WHERE句を忘れると全件削除となり、復旧が困難なケースも多い。
本番環境では、実行前に必ずSELECTで対象データを確認し、可能であればトランザクションを使って安全に運用したい。
※トランザクションによるROLLBACKが利用できるかどうかは、データベースやテーブルの設定などによって異なる。
BEGIN;
DELETE FROM users WHERE id = 5;
-- 結果を確認してから
COMMIT; -- 問題なければ確定
-- ROLLBACK; -- 問題があれば取り消しBEGINでトランザクションを開始し、実行結果を確認した上でCOMMIT(確定)またはROLLBACK(取り消し)を選べるため、万が一の操作ミスにも対応しやすくなる。
なお、実務でよく使われるGUIツール「A5:SQL Mk-2」は初期状態ではオートコミット(実行と同時に確定)がONになっている。
オプション画面の「データベース接続」タブから「データベースの更新時に自動的にトランザクションを開始する」にチェックを入れることで、コミット・ロールバックを手動操作に切り替えられる。この設定をオンにしておくと、更新時にトランザクションが開始され、コミット・ロールバックを手動で行えるため、UPDATEやDELETEを多用する作業では事故防止に役立つ。A5:SQLの具体的な使い方は別記事で紹介する。
まとめ
| 操作 | 目的 | 危険度(目安) | 主な注意点 |
|---|---|---|---|
| SELECT | データ取得 | 低 | 大量取得・機密情報・負荷に注意 |
| UPDATE | データ更新 | 高 | WHERE必須、事前SELECT推奨 |
| DELETE | データ削除 | 最高 | WHERE必須、トランザクション推奨 |
SELECT・UPDATE・DELETEはいずれも基本的な構文自体は難しくないが、実務では「WHERE句の徹底」と「事前確認の習慣化」が事故防止の鍵となる。特にUPDATEとDELETEについては、本番環境で実行する前に必ずSELECTで対象を確認するプロセスを身につけておきたい。


コメント