こんにちは、阿久梨絵です!
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に影響を与えるコマンドはたくさんあります。
「うっかり実行してしまった…」を防ぐためにも、“取り返しがつかない系”のコマンドは慎重に扱うことが大切です。
失敗しても学べる。でも、失敗しない工夫はもっとやさしい。
阿久梨絵でした!
