MySQL Alternative à « Table Lock » dans la procédure stockée
-
26-10-2019 - |
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?
La solution
vous pouvez utiliser
insert into ... on duplicate key
regard sur @thummper exemple réponse:
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.