2016-08-18 38 views
4

如果我要運行DELETE FROM some_table,那就是超時,數據會發生什麼變化?當SQL DELETE查詢超時時,數據會發生什麼情況?

的方式我看它,一兩件事情可能發生:

  • 數據被刪除了到查詢超時,所以如果有數據庫和第1,000,000條記錄點500,000被刪除,他們會保持刪除。數據庫現在包含了查詢運行之前的一半數量。

  • 數據被刪除,查詢超時,數據被回滾(我猜測是由DELETE所做的日誌?)。數據庫現在包含與其開始的完全相同的數據。

兩者似乎都合乎邏輯。會有100%的時間發生嗎?或者這是依賴於我不知道的一些設置?請注意,我並沒有詢問DELETE的可行性,我知道TRUNCATE可能是適合的。這純粹是出於對DELETE的超時功能的好奇。

+3

mysql是一個ACID數據庫。個別的查詢語句是原子的 - 它們要麼完全完成,要麼根本不做任何事情。 –

+0

@Marc:嚴格來說,它取決於所使用的引擎。 – sstan

+0

當* timeout *表示事務被中止時,DELETE將被回滾。 – dnoeth

回答

1

Oracle,SQL Server,MySQL,PostgreSQL數據庫遵循ACID屬性。因此,無論何時delete語句顯示超時,它必須回滾。 您可以從這個Link得到ACID的概述。

相關問題