Précédent   Forum du club des développeurs et IT Pro > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 19/12/2012, 10h01   #1
Joel Pinto Ribeiro
Membre régulier
 
Avatar de Joel Pinto Ribeiro
 
Homme Joel Pinto Ribeiro
Ingénieur développement logiciels
Inscription : juin 2011
Messages : 73
Détails du profil
Informations personnelles :
Nom : Homme Joel Pinto Ribeiro
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2011
Messages : 73
Points : 93
Points : 93
Par défaut Insert si l'enregistrement n'existe pas deja

Bonjour,

J'aimerais savoir quelle est la méthode la plus simple et efficace sous mysql pour insérer dans une table en vérifiant que les valeurs insérées n'existent pas déjà (dans ce cas pas d'insertion).

J'ai fait à l'époque :

Code :
1
2
3
4
5
INSERT INTO ma_table 
(colonne1,colonne2)
 SELECT 'valeur1','valeur2'
  FROM ma_table
  WHERE (SELECT count(*) FROM  ma_table WHERE colonne1='valeur1' AND colonne2='valeur2')=0;
Mais ça me semble lourd, je pense qu'il doit y avoir des fonctions de bases qui permette ça plus simplement.
(Attention je demande pas la première méthode qui marcherait je cherche vraiment la façon la plus optimisé pour faire cela)

avec une contrainte d'unicité?

Merci d'avance.

Joel
__________________
Jeune ingénieur passionné des technologies Microsoft .NET, ainsi que du partage de connaissances.
Joel Pinto Ribeiro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2012, 10h29   #2
Golgotha
Modérateur
 
Avatar de Golgotha
 
Homme cédric
Artiste développeur
Inscription : août 2007
Messages : 1 045
Détails du profil
Informations personnelles :
Nom : Homme cédric
Localisation : France

Informations professionnelles :
Activité : Artiste développeur
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2007
Messages : 1 045
Points : 2 081
Points : 2 081
Envoyer un message via Skype™ à Golgotha
Bonjour,

Quelques chose de ce genre :

Code :
1
2
INSERT INTO TABLE (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;
source
__________________
modérateur webmasters - développements web & php
faq jQuery - règles du forum - faqs web
mon espace perso
Suivez mon blog
Golgotha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2012, 10h51   #3
ericd69
Expert Confirmé
 
Avatar de ericd69
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 1 802
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 1 802
Points : 3 096
Points : 3 096
salut

ou un trigger aussi qui permet plus de complexité que on duplicate key qui ne touche que la première colonne citée dans l'insert pour l'unicité
__________________
soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2012, 13h39   #4
Joel Pinto Ribeiro
Membre régulier
 
Avatar de Joel Pinto Ribeiro
 
Homme Joel Pinto Ribeiro
Ingénieur développement logiciels
Inscription : juin 2011
Messages : 73
Détails du profil
Informations personnelles :
Nom : Homme Joel Pinto Ribeiro
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2011
Messages : 73
Points : 93
Points : 93
Citation:
Envoyé par Golgotha Voir le message
Bonjour,

Quelques chose de ce genre :

Code :
1
2
INSERT INTO TABLE (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;
source
Je vois pas trop en quoi cela répond à mon besoin .
De ce que j'ai compris le "on duplicate key update" permet de mettre à jour une colonne si deja present ? (Je vois le fonctionnement mais pas le besoin métier qui nécessiterai ce genre de requête) .

Ensuite le trigger me parait plus lourd que le "insert into ignore" , car il faudrait creer autant de trigger que de tables à vérifier (donc à maintenir cela risque de devenir lourd?) .

Merci pour les réponses en tout cas .
__________________
Jeune ingénieur passionné des technologies Microsoft .NET, ainsi que du partage de connaissances.
Joel Pinto Ribeiro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2012, 13h45   #5
ericd69
Expert Confirmé
 
Avatar de ericd69
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 1 802
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 1 802
Points : 3 096
Points : 3 096
il y a aussi la procédure stockée qui permet alors de constituer un api coté sgbd...
__________________
soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 19h16.


 
 
 
 
Partenaires

Hébergement Web