我正在開發與數據庫交互的.NET應用程序。在一個方法中,我開始一個SQL事務並修改table1
中的一些值,在完成更改(但仍未提交事務)後,我啓動Threading.Thread
以使用table1
中的數據更新table2
中的值。在事務運行時訪問數據庫中的更改
此線程會讀取修改後的值嗎?或者它會像交易開始之前那樣加載數據?
我正在開發與數據庫交互的.NET應用程序。在一個方法中,我開始一個SQL事務並修改table1
中的一些值,在完成更改(但仍未提交事務)後,我啓動Threading.Thread
以使用table1
中的數據更新table2
中的值。在事務運行時訪問數據庫中的更改
此線程會讀取修改後的值嗎?或者它會像交易開始之前那樣加載數據?
這取決於第二個線程是否使用與事務啓動相同的連接/會話。如果是,那麼它可以看到在該交易期間迄今爲止所做的更改。如果它是一個不同的連接,那麼這些更改將視而不見,直到他們承諾。
使用RepeatableRead
或ReadUncommitted
第二個線程中事務的事務隔離級別允許您從table1中讀取未提交的數據。在事務隔離級別
更多信息:
Set Transaction Isolation Level (Transact-SQL)
不同的是,你將如何確保數據正在讀取和更新表2之前寫入表1的問題,但是這取決於在你的.NET應用程序實現上。