最後に実行したmysqlクエリを元に戻すにはどうすればよいですか?
テーブルタイプをInnoDBとして定義すると、トランザクションを使用できます。 AUTOCOMMIT=0
を設定し、クエリまたはセッションの最後にCOMMIT
またはROLLBACK
を発行してトランザクションを送信またはキャンセルする必要があります。
ROLLBACK -- will undo the changes that you have made
これはトランザクション中にのみ可能です。
BEGIN;
INSERT INTO xxx ...;
DELETE FROM ...;
その後、次のいずれかを実行できます。
COMMIT; -- will confirm your changes
または
ROLLBACK -- will undo your previous changes
基本的に、トランザクションを実行している場合は、単にロールバックを実行します。そうしないと、MySQLクエリを「元に戻す」ことができません。
これによって処理されているクエリを停止できます
=> show processlist;でクエリプロセスのIDを見つけます。
次に=> kill id;
最後のクエリを元に戻す必要があるだけではない場合(実際にはあなたの質問は実際にそれを指しているだけです)
クエリをコミットする前に元のデータをコピーし、両方のテーブルで同じでなければならない一意のIDに基づいてオンデマンドで書き戻します。ロールバックテーブル(変更されていないデータのコピーを含む)と実際のテーブル(「元に戻す」必要があるデータを含む)。多くのテーブルを持つデータベースの場合、元のデータの構造化されたダンプ/コピーを含む1つの「ロールバックテーブル」は、実際のテーブルごとに1つ使用する方が適切です。実際のテーブルの名前、行の一意のID、および3番目のフィールドに、データ構造と値を明確に表す任意の形式(XMLなど)のコンテンツが含まれます。最初の2つのフィールドに基づいて、この3番目のフィールドが解析され、実際のテーブルに書き戻されます。タイムスタンプを持つ4番目のフィールドは、このロールバックテーブルのクリーンアップに役立ちます。
トランザクションの「ロールバック」にもかかわらず、SQLの方言に本当の取り消しはないため(間違っている場合は修正してください-現在1つあります)、これが唯一の方法であり、コードを記述する必要がありますあなた自身でそれのために。