その後に行われた他の変更を保存しながら、いくつかの変更をロールバックしたい。mysql DBに古い変更を保存しながら特定の特定の変更を元に戻す
Change 1 (update statement on table A)
Change 2 (insert statement on table B using table A)
私は、変更1をロールバックする必要はなく、2が、私の要件の周りの仕事を受け入れることができます。
- は、変更1をターゲットとし、これだけをロールバックする方法はありますか?
- テーブル(B)を保持している間に変更をロールバックする方法はありますか?
- 挿入を除いてすべてをロールバックする方法はありますか?
- テーブルAをロールバックする方法はありますか?他のテーブルはロールバックできませんか?
- 1つのタイプの変更(更新)のみをロールバックする方法はありますか?
トランザクションはアトミックなものであるため、厳密な答えは「いいえ」だと思いますが、ここでは回避策を求めています。
私は、一時テーブル内のデータを保存するように構成され、現時点での答えのようなものを持っているが、それは重いと進化のではない:http://sqlfiddle.com/#!9/64d1f/1私の質問は以下に関連している
:Nested transaction rollback between two savepoints? しかし鉱山は制限の少ないです(あなたはこれに答えることなく私の質問に答えることができますが、これに答えることは間違いなく私に答えるでしょう)。
すべての変更を記録し、十分な情報を保持するログファイルを作成して、反対の変更を適用できるように助言します。 前の状態に移動するのではなく、逆方向に同じ距離に移動します。 私はこれを行うことができると思う、それは強力でかなり軽い(CPU使用率で)。 私はそれが達成されることを検証します。 –