Mówię, że tego nie robisz z dwóch powodów:
- Komunikaty o błędach są nieco niejasne:BŁĄD 1062 (23000):Zduplikowany wpis „xxx” dla klucza 1 . Czy zawsze masz 100% pewności, który klucz to 1?
- unieruchamia cię do konkretnego dostawcy bazy danych
Uważam, że łatwiej jest transakcyjnie :
- sprawdź istnienie wiersza;
- zgłoś wyjątek, jeśli wiersz już istnieje;
- wstaw nowy wiersz.
Problemy z wydajnością :
Mówię zmierz dwa razy, wytnij raz . Profiluj użycie dla konkretnego przypadku użycia. Z dumą powiedziałbym, że wydajność nie będzie problemem, z wyjątkiem scenariuszy intensywnego użycia bazy danych.
Powodem jest to, że po wykonaniu SELECT
nad tym konkretnym wierszem jego dane zostaną umieszczone w pamięci podręcznej bazy danych i natychmiast używane do sprawdzania wstawiania wykonywanego w indeksie dla INSERT
oświadczenie. Pamiętaj także, że dostęp ten jest poparty indeksem, prowadzi do wniosku, że wydajność nie będzie problemem.
Ale, jak zawsze, mierz.