2017-06-17 9 views
0

テーブルAに対するこのような本当に望ましくない更新クエリがありました。このテーブルには、テーブルB、Cを更新する更新後トリガが含まれています。私たちは、表AのUpdate文であったメイントランザクションを終了しました。問題は、表BとCの変更もロールバックされましたか?または、更新後のトリガーがまったく呼び出されていますか?実行が終了する前にセッションを終了してからです。前もって感謝します。は、セッション・キル(トランザクション・ロールバック)後に更新トリガーが終了したかどうかを確認します。

答えて

0

アクセスする表のすべてが(例えば、MyISAMテーブルやメモリを使用していない、InnoDBテーブルを使用した例)トランザクションテーブルです

    あなたが取引している
  • ...場合

...ロールバック(セッションの強制終了による暗黙的なロールバックを含む)ロールバックすべてトランザクション内での変更(トリガーによる変更を含む)外部キー操作をカスケードします。

トリガー(およびカスケード)はMySQLで延期されることはありませんので、行が更新されるとFOR EACH ROWが発生しますが、すべての変更がロールバックで元に戻されるため、これは学術的なものです。

表Aがそのままの場合、表BおよびCもそのままでなければなりません。もちろん、最も安全なコースは、最近のバックアップを取得し、現在のデータフィルとバックアップで見つかったものとを比較することです。これはもちろん、スナップショットのバックアップが頻繁に行われることを前提としています。

関連する問題