Nach doppelten Datensätzen suchen VS versuchen, die Eindeutige Schlüsseleinschränkung abzufangen

8

Ich habe eine Datenbanktabelle, in der eine Eindeutige Schlüsseleinschränkung definiert ist, um zu vermeiden, dass doppelte Datensätze auftreten.

Ich bin gespannt, ob es eine schlechte Übung ist, NICHT manuell nach doppelten Datensätzen zu suchen, bevor eine INSERT-Anweisung für die Tabelle ausgeführt wird.

Mit anderen Worten, sollte ich eine SELECT-Anweisung ausführen, die eine WHERE-Klausel verwendet, die nach doppelten Werten des Datensatzes sucht, den ich INSERT einfügen möchte. Wenn ein Datensatz gefunden wird, führen Sie die INSERT-Anweisung nicht aus, andernfalls fahren Sie fort und führen Sie INSERT ....

aus

ODER

Führen Sie einfach die INSERT-Anweisung aus, und versuchen Sie / versuchen Sie die Ausnahme, die aufgrund einer eindeutigen Schlüsselverletzung ausgelöst werden kann.

Ich wäge die zwei Perspektiven ab und kann mich nicht entscheiden, welches das Beste ist- 1. Verschwenden Sie keinen SELECT-Aufruf, um nach Duplikaten zu suchen, wenn ich einfach nach einer Ausnahme VS suchen kann 2. Seien Sie nicht faul, indem Sie eine hässliche Try / Catch-Logik implementieren VS 3. Deine Gedanken hier ??? :)

    
Jed 27.03.2010, 18:56
quelle

3 Antworten

7

Sie müssen wirklich die Methode try..catch verwenden. Es mag weniger elegant sein, aber es ist kinderleicht.

Wenn mehr als ein Client diese Tabelle aktualisiert, kann ein anderer Client einen Datensatz zwischen Ihrer Prüfung und Ihrer Einfügung einfügen. Sie können immer noch überprüfen, ob Sie sparen möchten, wenn Sie versuchen, die Einfügung unnötig zu machen. Es kann eine kleine Leistungssteigerung sein, wenn Sie sich darüber Sorgen machen, aber nur, wenn ein Duplikat ist. Aber jedes Mal, wenn kein Duplikat ist, haben Sie eine Leistungseinbuße bezahlt, indem Sie sowohl SELECT als auch INSERT durchgeführt haben.

Wie auch immer, welche Chancen bestehen für eine Constraint-Verletzung? Wahrscheinlich klein, also warum mit dem Scheck belästigen?

    
Igby Largeman 27.03.2010, 19:17
quelle
3

Auch wenn Sie nach Duplikaten suchen, kann ein neuer Eintrag nach der Überprüfung und vor dem Einfügen eingefügt werden, so dass Sie immer noch versuchen / catch blockieren müssen.

    
Giorgi 27.03.2010 19:04
quelle
3

Try / Catch ist sicherer und skalierbarer, da Sie den Tisch nur einmal berühren. Der try / catch beseitigt die offensichtliche fehlerhafte Fehlerbehandlung in früheren Versionen

Siehe Lektion 4 aus diesem Artikel auch

    
gbn 27.03.2010 19:26
quelle

Tags und Links