Frage

Ich habe die Anforderung, eine Zeile in eine Tabelle einzufügen, wenn eine Zeile noch nicht vorhanden ist, und ich muss dies mit einer gespeicherten Prozedur tun. Ich muss daher auswählen, ob die Zeile bereits vorhanden ist, gefolgt von einem Einsatz. Was ich vermeiden möchte, ist eine Rennbedingung, bei der 2 Anrufer des gespeicherten Verfahrens sehen können, dass die Zeile nicht existiert und beide versuchen, die Zeile einzufügen.

Meine ersten Gedanken zur Lösung dieser LOCK TABLE in einem gespeicherten Verfahren.

Ich möchte vermeiden, eine doppelte Schlüsseleinnahme ausnahme im Client (C#) zu fangen.

Eine Möglichkeit, die Tabelle oder alternative Lösungen zu sperren?

War es hilfreich?

Lösung

Sie können verwenden

insert into ... on duplicate key

Schauen Sie sich ein Beispiel an @Thummper Antwort:

Auf doppelter Schlüssel ignorieren?

Andere Tipps

Eine andere Option ist die Verwendung

INSERT IGNORE INTO ... 

Und solange Sie einen einzigartigen Schlüssel haben, der durch diese Einführung zweimal verletzt wird, wird es nicht zum zweiten Mal erfolgen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top