MySQL Alternative zu „Sperrentabelle“ im gespeicherten Verfahren
-
26-10-2019 - |
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?
Lösung
Sie können verwenden
insert into ... on duplicate key
Schauen Sie sich ein Beispiel an @Thummper Antwort:
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.