|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : février 2006 Messages : 134 ![]() |
Bonjour.
Je souhaite poser une contrainte d'unicté sur deux champs avec une condition sur un des champs. Un petit exemple pour mieux comprendre. ma_table ( id_table, champ1 , champs2 ); il faut que champ1 soit unique pour une valueur de champ2 = 1. Cela est il possible avec les contrainte ? |
|
|
00
|
|
|
#2 | ||
|
Membre habitué
![]() Inscription : mars 2007 Messages : 107 ![]() |
Voici un exemple de création de table avec une contrainte unique sur deux colonne :
Code :
|
||
|
|
10
|
|
|
#3 | ||
|
Membre du Club
![]() Inscription : février 2006 Messages : 134 ![]() |
Merci pour la reponse.
Code :
par exemple pas de doublons de a avec c= 1 a | c 1 | 2 -> ok 1 | 2 -> ok 1 | 2 -> ok 1 | 1 -> ok 1 | 1 -> NON |
||
|
|
00
|
|
|
#4 |
|
Membre actif
![]() Développeur multimédia Inscription : avril 2007 Messages : 175 ![]() |
As tu essayé avec les triggers ? Les Triggers ne sont que des fonctions qui tolèrent ou non l'insertion (par exemple) d'un champs. Dans ta fonction, selon les valeurs en entré, tu accèptes ou non l'insertion.
|
|
|
00
|
|
|
#7 |
|
Membre du Club
![]() Inscription : février 2006 Messages : 134 ![]() |
finalement j'ai poser un trigerr before insert qui appelle une fonction qui verifie l'unicité.
|
|
|
00
|
|
|
#8 | |
|
Nouveau Membre du Club
![]() Inscription : juillet 2008 Messages : 101 ![]() |
Citation:
J ai une table enzyme qui contient 4 champs : - enzymeID : clé primaire, auto-increment - EC - nameE - Family je voudrais qu'il n'y ait pas 2 paires identiques sur les champs EC et NameE. J'ai créé un index unique sur les champs EC et NameE, mais cela ne fonctionne pas. comment utiliser la fonction trigger pour vérifier l'unicité des lignes insérées? merci de votre aide |
|
|
|
00
|
|
|
#9 | |
|
Membre confirmé
![]() Inscription : janvier 2006 Messages : 178 ![]() |
Citation:
En général il faut éviter les triggers quand on peut car les triggers conduisent vite à des usines à gaz et des comportements inattendus (trigger qui active un autre trigger... que l'on avait oublié bien sûr Très très très souvent on s'en sort avec des combinaisons de contraintes UNIQUE, CHECK et clés étrangères, parfois en dénormalisant un peu, mais sans trigger. |
|
|
|
00
|
|
|
#10 |
|
Nouveau Membre du Club
![]() Inscription : juillet 2008 Messages : 101 ![]() |
re-bonjour,
ben oui moi non je ne comprends pourquoi ca ne marche pas... exemple de doublons : EnzymeID EC NameE Family Nbgene 1 5.4.2.2 nom1 famille1 no 2 5.3.1.9 nom2 famile2 no 3 5.3.1.9 nom2 famille2 no je souhaite supprimer la ligne 3. j ai defini EnzymeID comme cle primaire et j ai cree un index unique sur EC et NameE Alter table 'enzyme' add unique 'unique_ec_namee' ('EC', 'NameE') apres j ai cree ma base sur un serveur local phpmyadmin et je ldois la remplir via un code perl |
|
|
00
|
|
|
#11 |
|
Membre confirmé
![]() Inscription : janvier 2006 Messages : 178 ![]() |
Etrange...
Quels sont les types de 2 colonnes ? N'y-a-t-il pas des blancs à la fin de l'une d'elles ? Edit : pourquoi ces quotes ? Essaies ce code : Code :
ALTER TABLE enzyme ADD CONSTRAINT unique_ec_namee UNIQUE(EC, NameE); Veux-tu dire phpPGadmin ou bien es-tu sous MySQL ? (la syntaxe n'a pas l'air d'une syntaxe Postgres correcte) |
|
|
00
|
|
|
#12 |
|
Nouveau Membre du Club
![]() Inscription : juillet 2008 Messages : 101 ![]() |
EC et nameE sont de type varchar.
et en fait je remplis cette base a partir d un tableau excel que j'ai enregistre sous format txt, separation par tabulation dans ce tableau, sur chaque ligne j 'ai differentes infos : nom de reaction - ec -nameE-compartiment-family-type de reaction-nbgene-gene-equation via perl je split le fichier au niveau des tabulations et je recupere les valeurs dont j'ai besoin (ici, ec-namee-family et nbgene). j'envois ces valeurs dans la base. apres dans mon fichier texte, sur certaines lignes, certaines valeurs ne sont pas renseignees comme ec, par exemple. mais normalememt (j'ai verifie en faisant affiche le tableau dans un fichier a part) quand il n'y a pas de valeur, perl considere "la case'' comme vide, elle n'est pas supprimee |
|
|
00
|
|
|
#13 |
|
Nouveau Membre du Club
![]() Inscription : juillet 2008 Messages : 101 ![]() |
je travaille sur mysql, mais sur phpmyadmin 5.0.51b sous serveur wampserver 2.0
j'ai essaye la requete que vous m'avez indique, elle semble fonctionner, puisque maintenant quand j essaie de remplir la table depuis perl, j ai un message d erreur qui m indique que l'insertion a echoue car il a des entrees doubles. maintenant nouveau probleme, comment continuer l'insertion en 'sautant' les doublons... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com