Уникальное ограничение против предварительной проверки - PullRequest
1 голос
/ 17 января 2011

Я использую SQL Server 2008, и у меня есть таблица со столбцом типа varchar (X), который я хочу иметь уникальные значения.

Каков наилучший способ достичь этого? Должен ли я использовать уникальное ограничение и перехватить исключение, или я должен предварительно проверить перед вставкой нового значения?

Одна проблема, приложение используется многими пользователями, поэтому я предполагаю, что предварительная проверка может привести к состоянию гонки, в случае, если два пользователя вставят одинаковые значения.

Спасибо

Ответы [ 4 ]

7 голосов
/ 17 января 2011

Состояние гонки - отличная точка, о которой нужно знать.

Почему бы не сделать и то, и другое?- Предварительная проверка, чтобы вы могли дать хороший отзыв пользователю, но определенно иметь уникальное ограничение в качестве вашей окончательной гарантии.

4 голосов
/ 17 января 2011

Пусть БД сделает всю работу за вас. Создайте уникальное ограничение.

3 голосов
/ 17 января 2011

Используйте ограничение (УНИКАЛЬНЫЙ или ПЕРВИЧНЫЙ КЛЮЧ).Таким образом, ключ применяется для каждого приложения.Вы можете выполнить дополнительные проверки и обработку в процедуре хранения, если вам нужно - либо до, либо после вставки.

3 голосов
/ 17 января 2011

Если требуется, чтобы значения были уникальными --- тогда ограничение является единственным гарантированным способом достижения этого.надежная так называемая предварительная проверка потребует уровня блокировки, который сделает эту часть вашей системы по существу однопользовательской.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...