@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