建議的副本不回答標題中的問題。將SQL Server表鎖定爲寫入但不能讀取
我想鎖定一張表,使其無法寫入,但可以讀取。那可能嗎?
這是在IsolationLevel.Serializable
的交易中發生了什麼?或者只有那些受影響的行? (這是一個鎖的讀取以及?)
如果重要的:我在C#中這樣做。
建議的副本不回答標題中的問題。將SQL Server表鎖定爲寫入但不能讀取
我想鎖定一張表,使其無法寫入,但可以讀取。那可能嗎?
這是在IsolationLevel.Serializable
的交易中發生了什麼?或者只有那些受影響的行? (這是一個鎖的讀取以及?)
如果重要的:我在C#中這樣做。
沒有它不可能。
只有擁有該鎖的會話才能訪問該表。在鎖定被釋放之前,其他任何會話都不能訪問它。
請參考以下鏈接:
該鏈接是針對mysql的。他想要MSSQL。因此,更合適的鏈接將是http://msdn.microsoft.com/en-gb/library/ms173763.aspx –
您的鏈接是關於MySql服務器 –
呃..我會用適當的鏈接編輯 – Freelancer
你可能想尋找NOLOCK/READUNCOMMITTED選項:http://www.mssqltips.com/sqlservertip/2470/understanding-the-sql-server-nolock-hint/
它可以讓你讀出從當前鎖定的表中的數據,但要小心其含義:您最終可能會讀取「鬼影」數據,即已插入並在事務中回滾的數據。
您應該在表上創建一個UNIQUE約束。即使您設法通過第一個進程來鎖定表,另一個進程很可能只會在第一個進程存在之前被阻止。
然後,您可能會開始擺弄超時,以確保第二個進程在訪問表之前超時,並且您正打開一個痛苦的世界。
覆蓋任何構成副本的字段的UNIQUE約束是迄今爲止您的最佳選擇 - 並且將確保不會輸入重複項,因爲我理解您的問題(並闡述評論)是最終目標。
我想你可能想要readunmitmitted,但我不知道 –
總是要非常小心使用讀取未提交。它不會取出共享鎖。在他的情況下,它可能是正確的使用,但他必須知道髒讀。 –
@AndyNichols同意這意味着你可能會得到返回的數據,永遠不會被提交。 –