2010-05-08 104 views
2

如果我試圖從表中刪除多行,並且其中一行由於數據庫關係而無法刪除,會發生什麼情況?mysql刪除和數據庫關係

不受關係約束的行是否仍會被刪除?或者將整個刪除失敗?

+2

你可以用2個虛擬表格相當快地測試它... – 2010-05-08 03:07:03

回答

1

如果是單個刪除語句,那麼整個刪除將失敗。

2

在MySQL中,如果設置了外鍵約束,如果嘗試插入不存在的ID或嘗試刪除現有ID,查詢將失敗。

換句話說,您的刪除將失敗。

0

所有的行都會刪除就好了。但是,您應該確保您的程序刪除了相關的行,否則會丟失帖子/記錄/可能發生的任何事情。

0

這裏有一個更普遍的問題:

  • 如果我這樣做會影響多行的SQL語句,並修改了一些行後遇到錯誤時,會發生什麼情況。

答案本質上是「它們都沒有受到影響,甚至已經成功了」。

內部發生的事情相當複雜。 InnoDB支持事務保存點,並且數據庫在當前事務中語句的開始處創建隱式保存點。如果語句中途失敗,則會回滾到隱式保存點。這意味着它看起來像從來沒有發生過的聲明(除非人們堅持使用READ_UNCOMMITTED隔離級別,如果他們不在意它們不應該這樣做)。

無論您是否使用顯式事務,都會發生這種情況。如果您使用顯式事務,則當前事務不會回退(除了某些類型的錯誤,例如死鎖和鎖等待超時,它必須執行以允許中斷被阻止),而只是回滾到最遠聲明的開始。