Question

J'ai une obligation d'insérer une ligne dans une table si une ligne n'existe pas, et je dois le faire en utilisant une procédure stockée. Je dois donc choisir de vérifier si la ligne existe déjà, suivi d'un insert. Ce que je veux éviter est une condition de course où 2 appelants de la procédure stockée peut voir que la ligne n'existe pas et les deux essayer d'insérer la ligne.

Mes premières réflexions sur la résolution serait de verrouiller la table, mais malheureusement vous ne pouvez pas question LOCK TABLE dans une procédure stockée.

Je veux éviter de piéger une exception en double d'insertion de clé au niveau du client (C #).

De toute façon de verrouiller la table ou des solutions alternatives?

Était-ce utile?

La solution

vous pouvez utiliser

insert into ... on duplicate key

regard sur @thummper exemple réponse:

sur clé en double ignorer

Autres conseils

Une autre option consiste à utiliser

INSERT IGNORE INTO ... 

et aussi longtemps que vous avez une clé unique qui serait violée par cet insert se passe deux fois, il ne sera pas fait une deuxième fois.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top