【新人向け】MySQLでコミット後に変更を元に戻すには?やさしく解説!

こんにちは。ゆうせいです。

「間違ってコミット(COMMIT)しちゃった…どうしよう…」
そんなふうに焦ったことはありませんか?

今回は、MySQLでコミットした後に変更を元に戻す方法について、
新人エンジニア向けに、基本から丁寧に説明していきます!


そもそも「コミット」ってなに?

まず最初に、「コミット(COMMIT)」とは何かを確認しましょう。

コミットとは、「今までの変更を確定すること」です。
たとえば、データを追加したり、修正したり、削除したりしたあとに、

COMMIT;

と書くことで、その変更はデータベースに永久に保存されます。

一度コミットすると、その変更は確定して、元に戻すことが基本的にはできなくなります。


じゃあ、どうやって「戻す」の?

残念ながら、コミット後はROLLBACKできません!

MySQLには「ROLLBACK(ロールバック)」というコマンドがあり、
コミットであれば、このコマンドで変更を取り消すことができます。

ROLLBACK;

でも注意!

COMMITの後にROLLBACKしても、変更は戻りません。

たとえるなら、「保存前の文書なら元に戻せるけど、保存しちゃったら元には戻せない」ようなものです。


じゃあもうダメなの?実は方法はある!

コミットしてしまった後でも、次のような方法で対応できることがあります。

方法1:バックアップからリストアする

もし定期的にバックアップ(dump)を取っていれば
コミット前の状態に戻せる可能性があります。

mysql -u user -p database_name < backup.sql

これは「保存しておいたデータを読み込む」イメージです。

ただし、直近の変更しか含まれていないときは意味がないかもしれません。


方法2:逆操作(逆クエリ)を手動で行う

たとえば、間違って以下のような削除をしたとします。

DELETE FROM users WHERE id = 5;
COMMIT;

この場合、データはもう元に戻せません。ですが、その削除内容を記録しておけば
以下のように手動で「元に戻す操作」ができます。

INSERT INTO users (id, name, email) VALUES (5, '山田太郎', 'yamada@example.com');

つまり、「何をしたか」をちゃんと把握できていれば、元に戻す“逆クエリ”を自分で書くことができるんですね。


防ぐための工夫:やらかす前にできること

新人エンジニアにとって一番大事なのは、ミスを防ぐ習慣をつけること!
以下のような対策をおすすめします:

対策説明
トランザクションで区切るSTART TRANSACTIONCOMMIT を手動で操作する
本番環境では慎重にローカルで検証してから、本番に反映する
バックアップを定期的に取る万が一のときに備えておく
クエリログを残す何を実行したのかあとで確認できるようにする

まとめ

  • COMMIT変更を確定するコマンド
  • ROLLBACKコミット前なら変更を元に戻せる
  • コミット後に元に戻すには:
    • バックアップを使ってリストアする
    • 逆クエリ(取り消し操作)を手動で書く
  • ミスを防ぐにはトランザクションの習慣化とバックアップがカギ!

今後の学習の指針

  • START TRANSACTION, COMMIT, ROLLBACKの流れを実際に手を動かして試そう!
  • 誤操作防止のための「セーフモード」や「クエリログ」の設定も調べてみよう!
  • 本番環境で使うときの運用ルール(レビュー、確認フローなど)も勉強してみよう!

操作は慎重に!そして学びは確実に!自信を持って一歩ずつ進んでいきましょう!


セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。