MySQL alternativa a “Tabella Lock” in stored procedure
-
26-10-2019 - |
Domanda
Ho un requisito per inserire una riga in una tabella se una riga non esiste, e devo farlo utilizzando una procedura immagazzinata. Pertanto bisogno di selezionare per verificare se la riga esiste già, seguita da un inserto. Quello che voglio evitare è una condizione di competizione in cui i chiamanti 2 della stored procedure possono vedere che la riga non esiste e quindi entrambe cercano di inserire la riga.
I miei primi pensieri sulla risoluzione di questo sarebbe quello di bloccare la tabella, ma purtroppo non si può problema LOCK TABLE
in una stored procedure.
Voglio evitare di intrappolare un'eccezione inserimento chiave duplicata sul client (C #).
Qualsiasi modo di bloccare le soluzioni di tabella o alternative?
Soluzione
è possibile utilizzare
insert into ... on duplicate key
sguardo sull'esempio @thummper risposta:
Altri suggerimenti
Un'altra opzione è quella di utilizzare
INSERT IGNORE INTO ...
e finché si dispone di una chiave univoca che sarebbe stato violato da questo inserto accade due volte, non sarà fatta una seconda volta.