2011-09-06 3 views
1

J'ai besoin d'insérer une ligne dans une table si une ligne n'existe pas déjà, et j'ai besoin de le faire en utilisant une procédure stockée. J'ai donc besoin de sélectionner pour vérifier si la ligne existe déjà, suivie d'un insert. Ce que je veux éviter est une condition de course dans laquelle 2 appelants de la procédure stockée peuvent voir que la ligne n'existe pas et puis tous les deux essaient d'insérer la ligne. Mes premiers réflexions sur la résolution de ce problème seraient de verrouiller la table, mais malheureusement, vous ne pouvez pas lancer LOCK TABLE dans une procédure stockée.MySQL Alternative à "Lock Table" dans la procédure stockée

Je souhaite éviter de piéger une exception d'insertion de clé en double sur le client (C#).

Un moyen de verrouiller la table ou des solutions alternatives?

+0

qu'en est-il de l'insertion dans ... sur une clé en double ... –

+0

@Haim Fonctionne très bien. J'ai mis un champ à la même valeur dans "sur la mise à jour de la clé en double" et cela empêche l'erreur de la clé en double et ne met pas à jour mon champ ts. S'il vous plaît ajouter comme une réponse. –

Répondre

1

vous pouvez utiliser

insert into ... on duplicate key 

regard sur @thummper exemple répondre:

On duplicate key ignore?

+0

+1 Fonctionne bien. J'ai mis un champ à la même valeur dans "sur la mise à jour de la clé en double" et cela empêche l'erreur de la clé en double et ne met pas à jour mon champ ts. –

0

Une autre option consiste à utiliser

INSERT IGNORE INTO ... 

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

Questions connexes