Проверьте На Дублирующиеся Записи Ограничение Уникального ключа попытки/выгоды VS

У меня есть таблица базы данных, которой определили ограничение Уникального ключа для предотвращения дублирующихся записей от появления.

Мне любопытно, если это - плохая практика к НЕ, вручную проверяют на дублирующиеся записи до выполнения оператора INSERT на таблице.

Другими словами, если я выполняю оператор SELECT с помощью оператора Where, который проверяет на дублирующиеся значения записи, что я собираюсь ВСТАВИТЬ. Если запись найдена, то не выполняйте оператор INSERT, иначе идите вперед и выполняйте ВСТАВКУ....

ИЛИ

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

Я взвешиваю эти две перспективы и не могу решить, который является лучшим - 1. Не тратьте впустую ИЗБРАННЫЙ вызов для проверки на дубликаты, когда я смогу просто захватить для исключения VS 2. Не будьте ленивы путем реализации ужасного VS 3 логики попытки/выгоды.??? Ваши мысли здесь???:)

10
задан Jed 27 March 2010 в 18:56
поделиться

3 ответа

Вам действительно нужно использовать метод try..catch. Он может быть менее элегантным, но надежным.

Если более одного клиента обновляют эту таблицу, то другой клиент может вставить запись между вашим чеком и вашей вставкой. Вы все равно можете проверить, хотите ли вы, чтобы сэкономить, пытаясь сделать вставку без нужды. Это может быть небольшое увеличение производительности, если вас это беспокоит, но только если есть дубликат. Но каждый раз, когда не является дубликатом, вы платите за производительность, выполняя как SELECT, так и INSERT.

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

8
ответ дан 3 December 2019 в 21:58
поделиться

Даже если вы проверяете дубликаты, новый элемент может быть вставлен после проверки и до вставки, поэтому вам все равно нужен блок try/catch.

4
ответ дан 3 December 2019 в 21:58
поделиться

Try/catch более безопасны и более масштабируемы, поскольку вы будете обращаться к таблице только один раз. Try/catch устраняет откровенно нестабильную обработку ошибок в ранних версиях

См. также урок 4 из этой статьи

4
ответ дан 3 December 2019 в 21:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: