Казвам, че не правите това по две причини:
- съобщенията за грешка са малко неясни:ГРЕШКА 1062 (23000):Дублиран запис „xxx“ за ключ 1 . Винаги ли сте 100% сигурни кой ключ е 1?
- заключва ви към конкретен доставчик на база данни
Намирам, че е по-лесно за транзакционно :
- проверете за съществуването на реда;
- извеждане на изключение, ако редът вече съществува;
- вмъкнете новия ред.
Проблеми с производителността :
Казвам измери два пъти, изрежи веднъж . Профилирайте употребата за вашия конкретен случай на употреба. Отгоре на главата си бих казал, че производителността няма да бъде проблем, освен при тежките сценарии за използване на db.
Причината е, че след като извършите SELECT
над този конкретен ред, неговите данни ще бъдат поставени в кеша на базата данни и незабавно използва се за проверка на вмъкване, извършена в индекса за INSERT
изявление. Също така, като се има предвид, че този достъп е подкрепен от индекс, води до заключението, че производителността няма да бъде проблем.
Но, както винаги, измерете.