1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

*【DB設計・DB運用】『閲覧系』と『変更系』で覚える安全クエリ・要注意クエリ一覧

1
Posted at

『閲覧系』『変更系』
で覚える安全クエリ・要注意クエリ一覧

はじめに

SQLを触りはじめた頃、どのクエリが安全でどのクエリが危険なのか区別がつかず、本番環境でヒヤッとした経験を持つ人は多い。

覚え方は

  • SHOW / SELECT / DESCRIBE / EXPLAIN = 見るだけ、安全
  • CREATE / DROP / ALTER / DELETE / UPDATE / INSERT / GRANT = 変わる、要注意

これは分類をベースに主要なクエリを表形式でまとめている
備忘録として残しておくメモである。

『閲覧系』安全クエリ一覧

データを参照するだけで、データベースの中身を変更しないクエリ。基本的に叩いても状態は変わらない。

安全クエリ一覧

クエリ 内容 備考
SHOW 一覧を見る(テーブル、DB、権限など) 見るだけ
SELECT データを取り出す 定番。ただし重いクエリは本番の負荷になる
DESCRIBE / DESC テーブルの構造を見る カラム定義の確認に使う
EXPLAIN 実行計画を見る チューニングの相棒
USE 使うDBを選ぶ 対象の切り替えのみ
WITH 一時的な結果セットを定義(CTE) SELECTの補助
SET(セッション変数) 表示系の設定変更 セッション内だけなら安全寄り

「安全」とはいえ油断は禁物である。特に SELECT は、巨大なテーブルに対して無邪気に全件取得すると、本番環境の負荷を跳ね上げてサービスを不安定にさせることがある。見るだけだから安全、ではなく「データは変えないが負荷はかける」という点は頭の隅に置いておきたい。

『変更系』要注意クエリ一覧

データやスキーマ、権限を変更するクエリ。実行するとデータベースの状態が変わるため、叩く前に一呼吸置く必要がある。

要注意クエリ一覧

クエリ 内容 備考
CREATE テーブルやDBを作る 既存名と衝突すると事故のもと
DROP テーブルやDBを丸ごと消す 最凶。一発で全部消える。復元できる前提で扱わないこと
ALTER 構造を変える(カラム追加・削除など) 本番の大テーブルで叩くとロックで停止する恐れ
DELETE 行を消す WHERE を忘れたら全行消滅。やらかしの王道
UPDATE 行を書き換える WHERE 忘れは DELETE と同罪。全行上書きになる
INSERT 行を追加する 重複や制約違反で詰まる。地味に厄介
GRANT / REVOKE 権限を与える/剥がす 権限設計のミスは後で全員に響く
TRUNCATE テーブルの中身を全消し DELETE より速く、戻せない。ロールバックも効かない
MERGE 条件で更新か挿入かを振り分け 挙動を理解せず使うと事故る
REPLACE あれば消して入れ直す 実質 DELETE+INSERT。裏で行が消える点を見落とさないこと

要注意クエリの中でも、TRUNCATEDROP は「戻せない組」として別格で警戒しておきたい。ロールバックが効かないケースが多く、実行した瞬間に取り返しがつかなくなる。また DELETEUPDATE は、必ず先に同じ WHERE 条件で SELECT を打ち、対象行を確認してから実行する癖をつけておくとよい。事故の大半はこの一手間で防げる。

まとめ

覚え方の芯は

  • 見る系(SHOW / SELECT / DESCRIBE / EXPLAIN)は安全
  • 変える系(CREATE / DROP / ALTER / DELETE / UPDATE / INSERT / GRANT)は要注意

その上で、次の3点を意識しておけば大きな事故は避けられる。

  1. DROPTRUNCATE は「戻せない組」として別格で扱う
  2. DELETE / UPDATE は実行前に SELECT で対象を確認する
  3. 「安全」な SELECT も、巨大テーブルでは負荷という別のリスクがあると心得る
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?