Вставить VS (выбрать и вставить) - PullRequest
0 голосов
/ 29 марта 2011

Я пишу простую программу для вставки строк в таблицу. Но когда я начал писать программу, у меня возникли сомнения.В моей программе я получу двойной ввод несколько раз.Тогда я должен уведомить пользователя о том, что он уже существует.

Какой из следующих подходов целесообразно использовать для достижения этого

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

  2. Сначала выполните поиск значений первичного ключа.Если найдено значение Prompt User.В противном случае выполните операцию вставки. Для неповторяющейся строки этот подход требует 2 запросов.

Пожалуйста, дайте мне знать компромиссы между этими подходами.Какой из них лучше всего следовать?

С уважением, Санни.

1 Ответ

0 голосов
/ 29 марта 2011

Я бы выбрал 2-й подход.

Первый вызовет исключение, которое, как известно, очень дорого ...

Во 2-м подходе будет использоваться SELECT count(*) FROM mytable WHERE key = userinput который будет очень быстрым и оператор INSERT, для которого вы можете использовать один и тот же объект подключения к БД (при условии OO;)).

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

РЕДАКТИРОВАТЬ: в зависимости от вашей СУБД вы также можете использоватьif not exists предложение

РЕДАКТИРОВАТЬ 2: Я думаю, что Java выдаст SQLExcpetion независимо от того, что пошло не так, то есть, используя 1-й подход, вы не сможете различать дублирующуюся запись или недоступную базу данных безнеобходимость разбора сообщения об ошибке - что снова является точкой для использования SELECT + INSERT (или if not exists)

...