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?

È stato utile?

Soluzione

è possibile utilizzare

insert into ... on duplicate key

sguardo sull'esempio @thummper risposta:

Sulla chiave duplicata ignorare?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top