Si update rien insert

Florynth Messages postés 48 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 7 février 2008 - 15 juil. 2006 à 22:26
Florynth Messages postés 48 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 7 février 2008 - 19 juil. 2006 à 13:36
Bonjour, très simple,

je veux faire un update dans une base de donnée MySQL et si l'enregistrement n'existe pas je veux l'inséré... Je suis capable de faire quelque chose (genre faire un SELECT et puis vérifier si il y a un retour, si oui Update sinon Insert) mais je veux que ça soit le plus efficace possible. On peux pas se servir de mysql_affected_rows() parce que si le update ne modifie rien ça retournera 0 même si l'enregistrement existe...

L'autre moyen que j'ai pensé c'est de faire un Insert si il y a un erreur mysql qui dit "duplicate value on index" je fais un Insert, je crois que c'est le moyen le plus propre (mon professeur de BD Oracle ma toujours dit que faut pas faire des tests préléminaires, c'est le système de BD qui doit le faire et nous on gère les erreurs...) mais je me demandais si il y a avais une solution plus adéquate.

Florynth

4 réponses

rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
15 juil. 2006 à 23:57
Essaye de poster dans la categorie SQL , ou au moins de chercher ^^ mais ptet que tu connaissais pas ..
http://www.sqlfr.com/codes/SQL-SERVER-PROC-STOCK-FAISANT-SOIT-UPDATE-SOIT_26595.aspx
davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
16 juil. 2006 à 20:24
l'idée du select puis update ou insert n'est pas du tout une mauvase idée.

-------------------------------------
Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
Linkman Messages postés 113 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 24 juin 2009
19 juil. 2006 à 11:59
Mouais ... moi j'aurais eu tendance à faire un select et si mysql_num_rows >= 1 update, si non insert.
Florynth Messages postés 48 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 7 février 2008
19 juil. 2006 à 13:36
Merci de votre aide,

J'ai trouvé aussi la commande REPLACE au lieu de UPDATE qui détruit l'enregistrement et le remplace par les nouvelles données. Pas besoin de spécifié de where car il le fait ou sont la PRIMARY KEY.

Mais je n'ai pas retenu cette option (je vous la donne à titre d'info) explication :

TABLE `temp`
COLUMN `id` (PRIMARY), `column2`,`column3`,`column4`,`column5`

Il faut être sur que tout les champs soit présent.

REPLACE `id`='value1',  `column2`='value2' , `column3`='value3'

Les valeurs de `column4` et `column5` seront perdu car la command REPLACE fait un DELETE avant sur la PRIMARY KEY et INSERT ensuite.

Je ne suis pas arrêté sur mon choix mais je crois que le INSERT avec la gestion d'erreur reste la meilleur solution. Je ne vois pas quel cas exactement (j'ai pas trop le temp de réfléchir d'en dévellopé un présentement) mais si le mysql_num_rows retourne 0 et que je fais un INSERT et qu'il y a une erreur et bien je ne fera pas de UPDATE à moins de tester l'erreur, donc tant qu'à tester l'erreur par la suite aussi bien le faire au début !

Et pour répéter une fois de plus ce que mon prof de BD disait :

"Il ne faut pas faire des tests préléminaires, c'est le système de BD qui doit le faire et nous on gère les erreurs..."

Florynth
Rejoignez-nous