web-dev-qa-db-ja.com

MySQLで最後の削除コマンドをロールバックするにはどうすればよいですか?

テーブルから大量の行を誤って削除してしまった...

どうすれば元に戻すことができますか?

PuTTY を使用してクエリを実行しました。

誰かがこれから安全に私を導くことができれば私は感謝します...

51
Vijay

トランザクションをまだコミットしていない場合は、rollbackを試してください。 (commitまたはコマンドラインクライアントを終了して)既にトランザクションをコミットしている場合、最後のバックアップからデータを復元する必要があります。

29
Aaron Digulla

バックアップを作成していない場合は、ほとんどがっかりしています。

96
Omry Yadan

「ロールバック」は、 transactions を使用した場合にのみ機能します。これにより、クエリをグループ化して、そのうちの1つだけが失敗した場合にすべてのクエリを元に戻すことができます。

ただし、既にトランザクションをコミットした場合(または通常のDELETEクエリを使用した場合)、データを戻す唯一の方法は、以前に作成したバックアップからデータを回復することです。

13
Select0r

使用 BEGIN TRANSACTIONコマンドでクエリを開始します。いつでもROLLBACKできるように。

例えば:

  1. 取引を開始
  2. *学生から選択
  3. id = 2の生徒から削除
  4. *学生から選択
  5. ロールバック
  6. *学生から選択
5
Author PraWin

受け入れられた答えは常に正しいとは限りません。 MySQLでバイナリロギングを設定する場合、スナップショットとbinlogがまだある以前のポイントにデータベースをロールバックできます。

バイナリログを使用した7.5ポイントインタイム(インクリメンタル)リカバリは、この機能について学ぶための良い出発点です。

3
Phil Lello

MySQLの場合:

start transaction;

savepoint sp1;

delete from customer where ID=1;

savepoint sp2;

delete from customer where ID=2;

rollback to sp2;

rollback to sp1;
2
Shu Zhang

ロールバックデータが必要な場合は、まずautocommit = 0を実行してから、クエリの削除、挿入、または更新を実行する必要があります。

クエリを実行した後、ロールバックを実行...

0
Kishore Kishore

また、開発データベースからいくつかの値を削除しましたが、QAデータベースに同じコピーがあったため、スクリプトを生成し、オプション「スクリプトするデータのタイプ」から「データのみ」を選択し、テーブルを選択しました。

次に、同じデータを含む挿入ステートメントを取得し、開発データベースでスクリプトを実行します。

0
Nikki