J'ai une base de données MySQL où une clé (une chaîne) est lue à partir d'une source tierce. Cependant, ceux-ci ne sont pas toujours garantis uniques (ce sont des titres de films). J'ai donc besoin de vérifier l'unicité de la clé, et si ce n'est pas unique, modifiez-la pour la rendre unique - en ajoutant un compte incrémentiel à la fin de la clé par exemple.Assurer l'unicité d'une clé MySQL
Quel est le meilleur modèle pour cela? J'ai actuellement une table qui stocke toutes les clés reçues de la 3ème partie et stocke un compte, donc je fais:
INSERT INTO MYTABLE(KEY) VALUES(KEY_VAlUE) ON DUPLICATE KEY UPDATE KEY_COUNT = KEY_COUNT + 1
J'utilise JdbcTemplate et un porte-clefs pour récupérer l'ID du nouveau (ou mis à jour) rangée. Le problème est que j'ai aussi besoin de récupérer le compte. Je peux bien sûr maintenant faire une deuxième requête (SELECT) pour aller chercher l'enregistrement avec cet ID. Cependant, le problème ici est avec la concurrence. C'est possible (bien qu'improbable), un autre INSERT avec la même clé tierce se produit juste avant de faire mon SELECT. Dans ce cas, le compte serait incrémenté une seconde fois et je reculerais le compte.
Des idées?
Merci Richard.
Hi Thom. Oui, je sais que ce n'est pas idéal. La raison pour laquelle je veux le faire est que j'ai une belle URL lisible par l'homme - le titre est converti en une URL comme ça: http://mysite.com/The_Producers. "The_Producers" est donc ma clé DB unique, qui est utilisée pour extraire les informations de film correctes de la base de données. J'aime la suggestion de l'année, merci. –
Qu'est-ce que votre URL doit faire avec votre clé primaire? Il n'y a aucune raison qu'ils doivent être connectés. –