Problème :
Vous voulez connaître les noms par défaut des contraintes dans une table dans Oracle.
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
(la colonne name
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) DEFAULT 'UNKNOWN', personal_number varchar(100) UNIQUE, age int CHECK(age>15), country_id int, FOREIGN KEY(country_id) references country(id) );
Montrons comment Oracle nomme les contraintes de ces tables par défaut. Utilisez cette requête pour les voir :
select CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME from USER_CONSTRAINTS where TABLE_NAME='STUDENT' OR TABLE_NAME='COUNTRY';
Voici le résultat :
CONSTRAINT_NAME | CONSTRAINT_TYPE | TABLE_NAME |
---|---|---|
SYS_C007376 | R | ÉTUDIANT |
SYS_C007366 | P | PAYS |
SYS_C007374 | P | ÉTUDIANT |
SYS_C007367 | U | PAYS |
SYS_C007375 | U | ÉTUDIANT |
SYS_C007372 | C | ÉTUDIANT |
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. Comment les noms par défaut des contraintes sont-ils générés ?
Dans Oracle, le nom de la contrainte par défaut commence par le nom d'utilisateur, suivi de '_C
' et un numéro de séquence. Les types de contrainte sont ‘C
' (check
), 'P
' (clé primaire), 'U
' (contrainte unique) et 'R
' (clé étrangère). Tous les noms de contraintes par défaut sont générés en tant que 'SYS
', '_
', et le nombre. Vous pouvez voir les noms par défaut dans le tableau ci-dessus. Par exemple, le CHECK
contrainte pour la colonne age dans le student
la table porte le nom SYS_C007372
.