Mysql comment creer une clé unique sur deux colonnes d'un table
Fermé
Maliq
Messages postés
8
Date d'inscription
lundi 15 février 2010
Statut
Membre
Dernière intervention
25 juillet 2015
-
25 juil. 2015 à 17:52
kolm3 Messages postés 17 Date d'inscription jeudi 30 juillet 2015 Statut Membre Dernière intervention 1 août 2015 - 30 juil. 2015 à 15:46
kolm3 Messages postés 17 Date d'inscription jeudi 30 juillet 2015 Statut Membre Dernière intervention 1 août 2015 - 30 juil. 2015 à 15:46
A voir également:
- Unique mysql
- Mysql community server - Télécharger - Bases de données
- Vue unique whatsapp désactiver - Accueil - WhatsApp
- Error 2002 (hy000): can't connect to local mysql server through socket '/var/lib/mysql/mysql.sock' (2) ✓ - Forum Linux / Unix
- Ora-00001: violation de contrainte unique - Forum Programmation
- Windows 10 famille langue unique - Guide
1 réponse
kolm3
Messages postés
17
Date d'inscription
jeudi 30 juillet 2015
Statut
Membre
Dernière intervention
1 août 2015
30 juil. 2015 à 15:46
30 juil. 2015 à 15:46
Le plus simple serait :
MAIS :
CHECK est lu mais ignoré par les moteurs de stockage (ce qui est vraiment dommage).
Il faut donc passer par un trigger pour vérifier le contenu du insert avant l'insertion dans la table. Avant tout il faut savoir qu'un trigger est stocké à l'échelle d'une base de données.
Ajout d'un Trigger :
Aller dans le menu des triggers, déclancheur en français (en étant sur la base de données contenant la table visée) :
Et d'appuyer sur le bouton "Add trigger" ou "Ajouter un déclancheur" puis de compléter la fenêtre qui s'ouvre :

Une fois le trigger enregistré si on tente
Plus d'infos sur les triggers :
CREATE TABLE table_test ( col1 int(11) NOT NULL, col2 int(11) NOT NULL, label varchar(255), CONSTRAINT pk_table_test PRIMARY KEY (col1, col2), CHECK (col1 <> col2) );
CONSTRAINT pk_table_test PRIMARY KEY (col1, col2)permet de créer un clé primaire sur deux champs, si tu tiens à utiliser UNIQUE tu peux faire
UNIQUE (col1, col2).
MAIS :
CHECK est lu mais ignoré par les moteurs de stockage (ce qui est vraiment dommage).
Il faut donc passer par un trigger pour vérifier le contenu du insert avant l'insertion dans la table. Avant tout il faut savoir qu'un trigger est stocké à l'échelle d'une base de données.
Ajout d'un Trigger :
- En passant par l'interface en ligne de commande MySQL :
DELEMITER $$ CREATE TRIGGER trigger_table_test BEFORE INSERT ON table_test FOR EACH ROW BEGIN IF NEW.col1 = NEW.col2 THEN SIGNAL SQLSTATE '45000'; END IF; END;$$
- En passant par phpMyAdmin :
Aller dans le menu des triggers, déclancheur en français (en étant sur la base de données contenant la table visée) :

Et d'appuyer sur le bouton "Add trigger" ou "Ajouter un déclancheur" puis de compléter la fenêtre qui s'ouvre :

Une fois le trigger enregistré si on tente
INSERT INTO table_test VALUES (1, 1, "blabla");
une erreur apparaît : #1644 - Unhandled user-defined exception condition
Plus d'infos sur les triggers :