Problème :
Vous voulez connaître les noms par défaut des contraintes dans une table dans MySQL.
Exemple :
Dans notre base de données, nous créons deux tables, country
et student
, avec les contraintes suivantes :PRIMARY KEY
(l'identifiant de la colonne dans les tableaux country
et student
), FOREIGN KEY
(la colonne country_id
dans le tableau student
), DEFAULT
(le nom de la colonne dans le tableau student
), UNIQUE
(la colonne name
dans le tableau country
et la colonne personal_number
dans le tableau student
), et CHECK
(la colonne age
dans le tableau student
).
Solution :
CREATE TABLE country ( id int NOT NULL primary key, name varchar(100) UNIQUE ); CREATE TABLE student ( id int NOT NULL primary key, name varchar(100) NOT NULL DEFAULT 'unknown', personal_number varchar(100) UNIQUE, age int CHECK(age>15), country_id int, FOREIGN KEY(country_id) REFERENCES country(id) );
Montrons comment MySQL nomme les contraintes de ces tables par défaut. Utilisez cette requête pour les voir :
SELECT TABLE_NAME, CONSTRAINT_TYPE, CONSTRAINT_NAME FROM information_schema.table_constraints WHERE table_name='country' OR table_name='student';
Voici le résultat :
TABLE_NAME | CONSTRAINT_TYPE | CONSTRAINT_NAME |
---|---|---|
pays | CLÉ PRIMAIRE | PRIMAIRE |
pays | UNIQUE | nom |
étudiant | CLÉ PRIMAIRE | PRIMAIRE |
étudiant | UNIQUE | numéro_personnel |
étudiant | CLÉ ÉTRANGÈRE | student_ibfk_1 |
étudiant | VÉRIFIER | student_chk_1 |
Discussion :
Lorsque nous créons nos tables, nous définissons des contraintes pour certaines colonnes. Cependant, nous ne spécifions pas les noms de ces contraintes, elles sont donc nommées par défaut dans MySQL. Dans MySQL, les types de contraintes par défaut sont PRIMARY KEY
, FOREIGN KEY
, UNIQUE
, et CHECK
. Comment les noms par défaut sont-ils générés pour les contraintes ?
La PRIMARY KEY constraint
est simplement nommé PRIMARY
, car il y a toujours une clé primaire dans une table. Il existe deux contraintes nommées PRIMARY
dans le résultat ci-dessus, mais les tables auxquelles ils appartiennent sont différentes.
Pour FOREIGN KEY
, le nom suit la convention :le nom de la table, un trait de soulignement ('_
'), 'ibfk
', un autre trait de soulignement ('_
’), et un nombre. Pour notre exemple, il s'agit de student_ibfk_1
dans le tableau student
.
Le nom par défaut pour un CHECK
contrainte est similaire à celle de la clé étrangère. Il commence par le nom de la table, un trait de soulignement ('_
'), 'chk
', un autre trait de soulignement ('
_
’), et un nombre. Pour notre exemple, il s'agit de student_chk_1
dans le tableau student
.
Le nom par défaut d'un UNIQUE
contrainte est le nom de la colonne elle-même. Pour notre exemple, il s'agit de personal_number
dans le tableau student
. Lorsqu'il y a plusieurs colonnes avec le UNIQUE
contrainte, il utilise le nom de la première colonne dans la définition de la contrainte.