2016-08-18 3 views
4

DELETE FROM some_tableを実行してタイムアウトすると、データはどうなりますか?SQL DELETEクエリがタイムアウトすると、データはどうなりますか?

私はそれを見る方法、2つのうちの1つが起こるかもしれない

  • 1,000,000データベース内のエントリと最初のがあったので、もしデータが、どこのクエリがタイムアウトまでに削除されます500,000件が削除されても、削除されたままになります。データベースには、クエリが実行される前の半分の時間が含まれています。

  • データが削除され、クエリがタイムアウトし、データがロールバックされます(DELETEによって作成されたログから推測されます)。データベースには、それが開始したのとまったく同じデータが含まれるようになりました。

どちらも論理的です。 1つは時間の100%起こるでしょうか?またはこれは私が気付いていない設定に依存していますか?私がDELETEの実行可能性について質問していないことに注意してください。私はTRUNCATEがおそらく適切であると認識しています。これは純粋にDELETEのタイムアウト機能の好奇心から外れています。

+3

mysqlはACIDデータベースです。個々のクエリ文は完全であるか、まったく何もしません。 –

+0

@Marc:厳密には、使用されているエンジンによって異なります。 – sstan

+0

* timeout *は、トランザクションが中止された場合、DELETEがロールバックされることを意味します。 – dnoeth

答えて

1

Oracle、SQL Server、MySQL、PostgreSQLデータベースは、ACIDプロパティに従います。したがって、deleteのステートメントがタイムアウトした場合は、ロールバックされる必要があります。 このLinkからACIDの概要を得ることができます。

関連する問題