Pregunta

Tengo el requisito de insertar una fila en una tabla si una fila aún no existe, y necesito hacerlo usando un procedimiento almacenado. Por lo tanto, necesito seleccionar para verificar si la fila ya existe, seguido de un inserto. Lo que quiero evitar es una condición de carrera en la que 2 personas que llaman del procedimiento almacenado pueden ver que la fila no existe y luego ambos intentan insertar la fila.

Mis primeros pensamientos sobre resolver esto sería bloquear la mesa, pero desafortunadamente no puedes emitir LOCK TABLE en un procedimiento almacenado.

Quiero evitar atrapar una excepción de inserción de clave duplicada en el cliente (C#).

¿Alguna forma de bloquear la mesa o las soluciones alternativas?

¿Fue útil?

Solución

puedes usar

insert into ... on duplicate key

Mira el ejemplo @Thummper Respuesta:

En la tecla duplicada ignorar?

Otros consejos

Otra opción es usar

INSERT IGNORE INTO ... 

Y siempre que tenga una clave única que sea violada por este inserto que ocurre dos veces, no se hará por segunda vez.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top