Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1789 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  duplicata de clef primaire

 

Sujet(s) à lire :
 

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

duplicata de clef primaire

n°2230840
maestro130​3
Posté le 14-06-2014 à 11:25:20  profilanswer
 

Bonjour tout le monde,
Est ce qu'il y aurait une manière d'éviter d'avoir dans MySQL le message suivant:
 
 

Code :
  1. Duplicata du champ '18293' pour la clef 'PRIMARY'


 
successif à un Update.
 
En d'autres termes y aurait il un moyen de ne faire l'update quand c'est possible et quand c'est pas possible 'ne rien faire'.
 
Excusez mon ignorance surtout qu'il ne doit pas être professionnel de triturer la clé primaire.
 
Merci infiniment  
 

mood
Publicité
Posté le 14-06-2014 à 11:25:20  profilanswer
 

n°2230866
flo850
moi je
Posté le 14-06-2014 à 13:24:32  profilanswer
 

tu fais un update qui change la valeur de la clé primaire ?


---------------

n°2230899
maestro130​3
Posté le 15-06-2014 à 08:56:32  profilanswer
 

Bonjour
 
A supposer que j'ai une table T1(clé, ch1,ch2,ch3,ch4) et une autre table T2(clé, ch1,ch2,ch3) et que je veux insérer des enregistrements de T2 dans T1, sauf au cas où la même clé n'est pas là.
 
Comment faire dans ce cas avec IF?
 
Merci

n°2230900
flo850
moi je
Posté le 15-06-2014 à 09:27:39  profilanswer
 

tu ne fais un pas un update, mais un insert  et tu regardes du côté de "on duplicate update" ou "on duplicate ignore"


---------------

n°2230934
maestro130​3
Posté le 15-06-2014 à 18:35:47  profilanswer
 

Bonjour  
 
Merci. ça m'a beaucoup aidé
A+

n°2230954
gpl73
Posté le 16-06-2014 à 09:24:27  profilanswer
 

@maestro1303: Tu as un problème de conception et/ou d'analyse , si tu ne sais pas quand tu dois faire ou pas un update ou un insert...
A mon avis, en plus, tu ne comprends pas tout ce que tu dis...
Tu parles d'updater une clé primaire, mais avec tes exemples, c'est pas flagrants, et comme tu dis, c'est pas top...
Un update de clé primaire c'est un "truc" simple du style:  
Update T1 as a set  
a.clé = New_key ,
a.ch1 = New_ch1 (ou pas)...
 
Dans ce cas, tu remplaces la valeur de ta clé, pas une nouvelle (un update), mais c'est très "con", désolé du terme...
ex : maestro1303 c'est la clé identifiant de ton profil ici...
j'update maestro1303 par XXXX... paf tu n'existes plus  
de plus :
soit tous tes topics sont soit affectés à XXXX (pour ne pas perdre l'intégrité de ta BD)
soit on vient de perdre l'intégrité de la base(soit ta BD qui l'interdit).
 
Tu perds ainsi trace de l'ancien "enregistrement" et tu as le risque d'avoir une clé en double, car cela "correspond à un insert déguisé"...
 
Si tu veux faire un update dans le style comme dans ton exemple:
Update T1 as a set (a.ch1, a.ch2, ...)=(select b.ch1, b.ch2... from T2 as b where b.clé = a.clé) where a.clé in (select b.clé from T2);
 
Là tu n'updates pas la valeur de ta clé, mais les valeurs des champs associés.
 
Sinon, pour être "propre":  
Tu testes si ta valeur (t2.clé) existe dans la table t1...
différentes requêtes sql facile à faire existent :)
en gérant le sqlstate ou le résultat de ta requête
tu fais, en fonction, un update ou tu fais un insert...
ou mieux : tu remontes un message d'erreur à ton utilisateur , un warning, lui indiquant que sa clé existe déjà... et tu gères sa réponse !
 
Je vais passer peut être pour un vieux con et dinosaure (mais pas grave):
 
Quand tu fais un insert ou un update, tu n'es pas dans le même cas pour ta BD, mais aussi dans ton "métier"
si tu hésites entre les 2: cela veut dire que tu ne maitrises pas à 100 % ton process ...  
 
De plus: Il faut penser à la maintenance....  
C'est tout bête, mais quand tu développes, tu es dans ton truc, c'est cool... tu fais une " bidouille" et ça marche dans ce cas... hop et tu passes à un autre point...
Le soucis, c'est que si tu dois revenir dessus dans 6 mois, un an (ou un de tes collègues informaticiens doit reprendre ton code...) bas la bidouille qui te semblait évidente, le sera beaucoup moins pour lui.
Donc perte de temps, donc d'efficacité et donc le nerf de la guerre : perte d'argent....
Les commentaires ne mangent pas de pain... bien au contraire...
Guillaume


Message édité par gpl73 le 16-06-2014 à 09:25:47

---------------
mieux vaut être un con au chaud, qu'un con gelé lol

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  duplicata de clef primaire

 

Sujets relatifs
type de clé primaireQuestion clef étrangère
Relation entre clé primaire et clé étrangère[JAVA/Hibernate] Problème modification clé primaire/étrangère
Copier/Coller sous-clef de registre VBAMYSQL : Problème pour retrouver la clé primaire dans les metadatas
clé primaire auto incrémentationSupprimer une clef registre avec un batch ?
Comment supprimer un "warning" lié au mot-clef "const"index primaire/secondaire haché/b+
Plus de sujets relatifs à : duplicata de clef primaire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR