ROLLBACK じゃ守れない!DB操作の“危険コマンド”まとめ

こんにちは、阿久梨絵です!
SQLを学び始めると、 ROLLBACK やCOMMITのような「トランザクション制御」がまず登場しますよね。
でも実は、それ以外にもデータベースに大きな影響を与えるコマンドがいくつもあるんです。

今回は、そんな“見落としがちな注意ポイント”をやさしくまとめてみました。

まずはおさらい:ROLLBACKとCOMMITって?

ROLLBACK:変更を取り消す(「やっぱりやめる!」)
COMMIT:変更を確定する(「これで決定!」)

この2つは、トランザクションの出口。
でも、入り口や途中で使うコマンドにも、“取り返しがつかない”ものがあるんです

注意すべきコマンドたち

① DROP TABLE / DROP DATABASE

テーブルやデータベースを丸ごと削除します。

DROP TABLE users;
DROP DATABASE my_app;

ROLLBACKできません!
一度実行すると、データも構造も完全に消えます

② TRUNCATE TABLE

テーブルの中身(データ)を一気に削除します。構造は残ります。

TRUNCATE TABLE orders;

DELETEより高速ですが、ROLLBACKできないことが多いです
ログも残らず、“一瞬で空っぽ”になるので注意!

③ ALTER TABLE

テーブルの構造を変更します(カラム追加・削除・型変更など)。

ALTER TABLE products ADD COLUMN stock INT;

構造変更はROLLBACKできないことが多く、意図しない影響が出やすいです
アプリ側との整合性も崩れる可能性あり。

④ UPDATE / DELETE(WHERE句なし)

全件更新・削除になる危険な書き方

UPDATE users SET name = ‘匿名’;
DELETE FROM logs;

WHERE句を忘れると、全データが対象になります
テスト環境ならまだしも、本番でやると大惨事に…。

⑤ REPLACE INTO

既存データを削除して新規挿入する特殊な挙動

REPLACE INTO users (id, name) VALUES (1, ‘新しい名前’);

INSERTと似てますが、既存データが消える可能性があります。
主キーの重複に注意!

⑥ GRANT / REVOKE

ユーザー権限の変更を行います。

GRANT ALL PRIVILEGES ON mydb.* TO ‘user’@’localhost’;
REVOKE SELECT ON mydb.* FROM ‘guest’@’%’;

セキュリティに直結するため、誤操作は大きなリスクになります。
誰が何をできるか、慎重に設定しましょう。

補足:DDLはROLLBACKできないことが多い

コマンド内容ROLLBACK可能?
CREATE TABLE新しいテーブル作成❌(多くのDBで不可)
DROP TABLEテーブル削除
ALTER TABLE構造変更
INSERT / UPDATE / DELETEデータ操作✅(トランザクション内なら)

「データ操作」は戻せるけど、「構造変更」は戻せない
そんな違いを覚えておくと安心です。

まとめ

ROLLBACK やCOMMITだけでなく、DBに影響を与えるコマンドはたくさんあります。
「うっかり実行してしまった…」を防ぐためにも、“取り返しがつかない系”のコマンドは慎重に扱うことが大切です。

失敗しても学べる。でも、失敗しない工夫はもっとやさしい。
阿久梨絵でした!

上部へスクロール
Verified by MonsterInsights