2011-01-17 130 views
1

我使用SQL Server 2008,並且我有一個表類型爲varchar(X)的列,我想要具有唯一值。唯一約束與預檢

實現該目標的最佳方法是什麼?我應該使用唯一約束並捕獲異常,還是應該在插入新值之前預先檢查?

有一個問題,應用程序被許多用戶使用,所以我猜預檢查可能會導致競爭條件,以防兩個用戶插入相同的值。

謝謝

+0

相關問題 - https://stackoverflow.com/questions/21889843/unique-constraint-vs-checking-before-insert – Steam

回答

4

讓DB爲你做好工作。創建唯一的約束。

+0

有沒有任何一種方法會比另一種更好的方案?我在這裏發佈了一個相關的問題 - https://stackoverflow.com/questions/21889843/unique-constraint-vs-checking-before-insert請幫助我。謝謝。 – Steam

3

如果要求這些值是唯一的---那麼約束是唯一可以實現的方法。可靠的所謂預檢將需要一定程度的鎖定,使系統的這一部分基本上是單一用戶。

7

比賽條件是一個很好的觀點。

爲什麼不這樣做呢? - 預先檢查,以便您可以向用戶提供良好的反饋,但絕對有唯一的約束作爲您的最終保障。

+1

談到數據驗證時,冗餘並不一定是壞事。查看前端更好的界面,檢查後端的保證完整性。 – araqnid

+0

我不知道競賽狀況。您能否告訴我爲什麼在後端檢查所有內容時都應該這樣做。謝謝。 – Steam

+0

@araqnid - 我無法看到冗餘在這裏有多大幫助。 – Steam

3

使用約束(UNIQUE或PRIMARY KEY)。這種方式的關鍵是強制執行每個應用程序。如果需要,您可以在存儲過程中執行額外的檢查和處理 - 在插入之前或之後。