Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 08/03/2010, 15h35   #1
SrK
Membre du Club
 
Inscription : avril 2006
Messages : 205
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 205
Points : 45
Points : 45
Par défaut IF permettant soit de faire un UPDATE soit un INSERT

Bonjour,

Voici mon problème:
-je voudrai faire un UPDATE si l'élément existe en DB, sinon un INSERT.

Pré-requis: ne pas faire de procédure stockée.

A noter que je ne peux identifier mon élément par la clé primaire ou un index unique. ( donc pas de "REPLACE" ou "insert ... on duplicate key" possible à ma connaissance.

Merki :p

CODE avec une procédure stockée qui peut peut être illustrer le problème:

Code :
1
2
3
4
5
6
7
8
9
10
DELIMITER //
CREATE PROCEDURE test1234()
  BEGIN
	IF (SELECT count(*) FROM maTable WHERE name LIKE '%test%' > 0)
	THEN SELECT "UPDATE";
	ELSE SELECT "INSERT";
	END IF;
  END //
DELIMITER ;
CALL test1234();
__________________
La différence entre la théorie et la pratique, c'est qu'en théorie, il n'y a pas de différence, mais qu'en pratique, il y en a une.

Dernière modification par SrK ; 08/03/2010 à 15h52.
SrK est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2010, 15h56   #2
ced
Rédacteur/Modérateur
 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 778
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 778
Points : 6 207
Points : 6 207
Bonjour,

MySQL dispose de cette possibilité nativement, dans la syntaxe INSERT, avec la clause ON DUPLICATED KEY UPDATE...
Plus d'infos dans la documentation de MySQL : http://dev.mysql.com/doc/refman/5.0/fr/insert.html

ced
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2010, 16h01   #3
SrK
Membre du Club
 
Inscription : avril 2006
Messages : 205
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 205
Points : 45
Points : 45
Merci, mais comme indiqué dans mon message, je ne crois pas pouvoir faire de "insert ... on duplicate key" sachant que je n'ai pas la possibilité d'identifier mon élément par "une clé primaire" ou un "index unique", qui semble des pré-requis à l'utilisation de "insert ... on duplicate key" si je ne me trompe pas.
__________________
La différence entre la théorie et la pratique, c'est qu'en théorie, il n'y a pas de différence, mais qu'en pratique, il y en a une.
SrK est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2010, 18h11   #4
ced
Rédacteur/Modérateur
 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 778
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 778
Points : 6 207
Points : 6 207
Au temps pour moi, j'ai laissé passé ce "détail".
Du coup, en SQL, ce n'est pas possible. Si tu ne veux pas de procédure, et si tu n'as pas de clé, alors il n'existe aucune instruction qui puisse te permettre de choisir entre un update et un insert selon le cas...
En tout cas, pas à ma connaissance...

ced
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 22h46.


 
 
 
 
Partenaires

Hébergement Web