Dans mon application, j'ai quelques threads qui exécutent une certaine logique. A la fin, ils ajoutent une nouvelle ligne à une table.Deux threads ajoutant de nouvelles lignes en même temps - comment prévenir?
Avant d'ajouter la nouvelle ligne, ils vérifient si une entrée précédente avec les mêmes détails n'existe pas déjà. Si l'on trouve - ils mettent à jour au lieu d'ajouter. Le problème est que quand un thread A fait la vérification, voir qu'aucune entité précédente avec les mêmes détails n'existe, et juste avant d'ajouter une nouvelle ligne, le thread B recherche le DB pour la même entité. Thread B voir qu'aucune telle entité n'existe donc il ajoute une nouvelle ligne aussi.
Le résultat est qu'il y a deux lignes avec les mêmes données dans la table.
Remarque: aucune clé de table n'est violée, car le thread obtient la séquence suivante juste avant d'ajouter la ligne et la clé de table est un ID qui n'est pas associé aux données.
Même si je vais modifier la clé de la table afin qu'elle soit une combinaison des données, elle empêchera deux lignes avec les mêmes données, mais provoquera une erreur de DB lorsque le deuxième thread essaiera d'ajouter la ligne.
Merci d'avance pour votre aide, Roy.
Quelle langue utilisez-vous pour accéder à votre objet de données? – ChrisBD