2017-07-24 70 views
0

如果我的方法有幾個只讀,只有更新,刪除語句是否有創建一個事務?雖然在表面上它沒有任何意義(如果它是單線程的);但這是一個併發的Web應用程序,其中多個線程可能同時修改數據。我真的需要數據庫事務嗎?

+0

系統中是否有其他方法可能寫入數據庫?可以看到部分更新的數據嗎? – chrylis

+0

如果您重視您數據的一致性,那麼***是***。如果您不關心數據是否損壞,或者您的數據庫一次只能由一個用戶訪問,則不會。 – Andreas

+0

我已經修改了一些問題。這是併發的Web應用程序。但沒有具體的交易要求。 – Imran

回答

1

是的,可能有一個很好的理由將您的讀取(SELECT)操作包含在明確的事務或工作單元中。如果更新或刪除某行的決定取決於您讀取的行(同一行或另一個表中的某行)中的列值,或者甚至存在某行,則可能需要將該SELECT作爲的交易。

一個簡單的示例情況:表A包含書籍,並具有用於評級的int列。如果評分爲零(0),我想要刪除書籍行。如果沒有事務,數據層中的代碼將選擇評級爲0的行,然後迭代該書集行。在選擇行後的某個時間,另一個用戶將其中一本書的評分改爲一(1)。如果不應該刪除那本書,你最終還是會刪除該書。

在您讀取數據(時間戳等)後,存在數據一致性和檢查更新的策略,但您只需要在讀取數據並根據該數據做出決策時評估數據完整性的風險,並允許其他用戶更新相同的數據。

交易意味着消除這種風險。

1

,如果你有一個以上的數據庫操作(INSERT,UPDATE,DELETE)的方法會有一點用橫切

1

如果此方法例如2接連讀取,並且存在另一種方法更新你的數據庫。它可能發生,一個讀取發生,然後你的其他(事務)方法同時運行,並且只有在你的第二個讀取被執行之後。這可能會導致無效的讀取結果。