Я говорю, что вы не делаете этого по двум причинам:
- сообщения об ошибках немного неясны: ОШИБКА 1062 (23000): повторяющаяся запись 'xxx' для ключа 1 . Вы всегда уверены на 100%, какой ключ равен 1?
- привязывает вас к конкретному поставщику базы данных
Мне проще транзакционно :
- проверка существования строки;
- сгенерировать исключение, если строка уже существует;
- вставить новую строку.
Проблемы с производительностью :
Я говорю отмерь дважды, отрежь один раз . Профилируйте использование для вашего конкретного случая использования. Я бы сказал, что производительность не будет проблемой, за исключением сценариев интенсивного использования БД.
Причина в том, что после выполнения SELECT
над этой конкретной строкой его данные будут помещаться в кеши базы данных, а немедленно используется для проверки вставки, выполненной в индексе для оператора INSERT
, Кроме того, учитывая, что этот доступ поддерживается индексом, можно сделать вывод, что производительность не будет проблемой.
Но, как всегда, измерьте.