0

15 分ごとに実行される Cron ジョブを設定しています。特定のテーブルに新しいデータがある場合は、そのテーブルをバックアップし、電子メールで送信して削除します。

バックアップの実行と同時にデータがデータベースに書き込まれ、データの「半分」がバックアップされ、残りのデータが削除されることを心配する必要はありますか?

4

1 に答える 1

0

ジョブが説明どおりに動作する場合SELECT、メールの生成に使用された後、DELETE.

これを防ぐ最も簡単な方法は、使用しているデータベース エンジンがトランザクションをサポートしていると仮定して、トランザクション内で 2 つのステートメントを実行することです。

DELETEあるいは、一部のデータベース エンジンは、単一のアトミック トランザクションでステートメントからRETURNINGデータを返すことをサポートしています。

そのオプションが利用できない場合は、別の解決策DELETEとして、ソース テーブルで上限の日付/時刻または自動インクリメント ID 列を使用することをお勧めします。これを実装するには、ソース テーブルのスキーマ変更が必要になる場合があります。擬似コードは次のようになります。

SELECT <variable> = max(<identity>)
FROM   source_table

SELECT <columns>
FROM   source_table
WHERE  <identity> <= <variable>

DELETE source_table
WHERE  <identity> <= <variable>

source_table最初のSELECTと の間に追加されたデータDELETEは、 に格納されているよりも高い ID 値を持つ<variable>ため、削除されません。

于 2012-08-01T16:15:01.543 に答える