Paire de colonnes uniques

Eléphanteau du PHP | 24 Messages

23 oct. 2006, 10:51

Bonjour,

Je voudrait crée une table avec deux champs qui, par paire, seront unique, genre: (la ',' sépare chaque colonne)
1,1 = ligne unique
1,2 = ligne unique
2,5 = ligne unique
les paires (1,1), (1,2), et (2,5) représentent une ligne unique.
si par exemple j'ajoute 1,1, je crée un doublon.

Comment faire ?
Car j'ai une table avec deux colonnes INDEX, et je peux crée autant de doublon que je le souhaite, mais ce n'est pas ce que je veux.
Quand je crée une table avec PRIMARY comme première colonne et INDEX comme seconde, la clé primaire ne peux etre dédoublé (normale).

J'espère avoir été assez explicite,

Je n'ai pas essayé toutes les combinaisons possibles, mais créer des tables en tatonnant c'est pas vraiment top.

Olivier

ViPHP
ViPHP | 1961 Messages

23 oct. 2006, 10:57

Bonjour,

La solution la plus simple est de créer ta clé primaire sur les deux colonnes.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphanteau du PHP | 24 Messages

23 oct. 2006, 11:00

On ne peux pas avoir de clé primaire sur deux colonnes.
et comme expliquer, je souhaiterais que deux colonnes puissent représenté une valeur unique et non duplicable.

ViPHP
ViPHP | 1961 Messages

23 oct. 2006, 11:07

Re,
On ne peux pas avoir de clé primaire sur deux colonnes.
et comme expliquer, je souhaiterais que deux colonnes puissent représenté une valeur unique et non duplicable.
Depuis quand ???

Code : Tout sélectionner

mysql> create table ess( -> a int, -> b int, -> c varchar(10), -> primary key(a, b)); Query OK, 0 rows affected (0.01 sec) mysql>
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

ViPHP
ViPHP | 1961 Messages

23 oct. 2006, 11:11

Re,
Et ça fait exactement ce que tu veux

Code : Tout sélectionner

mysql> insert into ess(a, b, c) values(1,1,"ess 1"); Query OK, 1 row affected (0.00 sec) mysql> insert into ess(a, b, c) values(1,1,"ess 1"); ERROR 1062 (23000): Duplicate entry '1-1' for key 1 mysql>
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphanteau du PHP | 24 Messages

23 oct. 2006, 11:12

Désolé, je ne met pas en cause vos compétences, mais je me réfère simplement à la documentation, et oui, je suis bête et discipliné (et peut etre que je n'ai pas eu la force de lire la doc en entier...)
". Une table ne peut avoir qu'une seule clé primaire"
(Chapitre 13. Syntaxe des commandes SQL, Manuel de référence MySQL 5.0)

J'ai testé et cela fonctionne.
Merci.

Eléphanteau du PHP | 24 Messages

23 oct. 2006, 11:16

Oui en effet, de plus une clé primaire représente deux colonnes dans cet exemple. (ou plus)

Je suis allé un peu vite en besogne...
Merci encore.

Olivier.

ViPHP
ViPHP | 1961 Messages

23 oct. 2006, 11:17

Re,

Ce que dit la doc c'est exact, une table ne peut contenir qu'une seule clé primaire, mais la doc ne dit pas que la clé doit être sur une seule colonne.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphanteau du PHP | 24 Messages

23 oct. 2006, 11:19

Oui, en effet, et comme dit dans mon précédent post, je suis allé un peu vite, et j'en ai oubié de lire la phrase correctement, syntaxe, etc..

En allant trop vite, c'est ce qui se passe...
La prochaine fois cela me servira de leçon.

Bonne journée.

" La vie est SQL'elle est "