2011-12-22 2 views
1
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=3; 

Est-il possible de définir ce paramètre de façon à ce qu'il ne nécessite pas de ligne entière? Par exemple: si la colonne 'a' est un doublon, effectuez-vous la mise à jour?Mysql + SUR LA MISE À JOUR DE LA CLÉ DUPLIQUÉE

thx

Répondre

6

ON DUPLICATE KEY fait exactement cela ... si les données que vous insérez enfreignent une exigence de clé unique, transformez-la en une mise à jour sur la ligne qui a la combinaison de touches qui a causé la violation. Si votre clé primaire est seulement l'un des champs (par exemple 'a'), et que vous avez déjà une ligne dans la table où a = 1, alors vous obtiendrez une mise à jour et cette ligne originale aura son 'c' S'il s'agit d'une clé composite (disons 'a, b'), alors si vous aviez un enregistrement existant avec a = 1 et b = 2, alors les lignes 'C seraient changées en 3 au lieu de' 3 '. un nouvel enregistrement en cours de création.

S'il n'y a pas de clés uniques/primaires sur cette table, alors vous n'obtiendrez jamais de mise à jour, ce serait juste une instruction d'insertion extra-verbeuse.

+0

merci tas - comprendre et avoir mis à jour/changé comment la clé unique est mise en place - fonctionne très bien ... cochera lorsque la limite de temps passe ... – Adam

2

Si oui ou non une ligne est un doublon est dictée par les contraintes qui pèsent sur la table. Ce serait votre clé primaire, ainsi que toutes les clés uniques sur la table. Donc, si vous avez un index unique non multi-colonnes sur la colonne a, alors cela fonctionnera.

Sinon, vous pourriez probablement accomplir cela avec un déclencheur.

Questions connexes