Sie sind auf Seite 1von 27

Inclure des contraintes

Copyright Oracle Corporation, 2001. Tous droits rservs.


Objectifs

A la fin de ce chapitre, vous pourrez :


dfinir des contraintes
crer et grer des contraintes

10-2 Copyright Oracle Corporation, 2001. Tous droits rservs.


Qu'est-ce qu'une contrainte ?

Les contraintes appliquent des rgles au niveau d'une


table.
Les contraintes empchent la suppression d'une table
lorsqu'il existe des dpendances.
Les types de contrainte suivants sont utiliss :
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK

10-3 Copyright Oracle Corporation, 2001. Tous droits rservs.


Rgles applicables aux contraintes

Vous pouvez affecter un nom aux contraintes ou


laisser le serveur Oracle en gnrer un au format
SYS_Cn.
Vous pouvez crer une contrainte :
au moment de la cration de la table,
une fois que la table est cre.
Dfinissez une contrainte au niveau table ou
colonne.
Consultez le dictionnaire de donnes pour visualiser
une contrainte.

10-4 Copyright Oracle Corporation, 2001. Tous droits rservs.


Dfinir des contraintes

CREATE TABLE [schema.]table


(column datatype [DEFAULT expr]
[column_constraint],
...
[table_constraint][,...]);

CREATE TABLE employees(


employee_id NUMBER(6),
first_name VARCHAR2(20),
...
job_id VARCHAR2(10) NOT NULL,
CONSTRAINT emp_emp_id_pk
PRIMARY KEY (EMPLOYEE_ID));

10-5 Copyright Oracle Corporation, 2001. Tous droits rservs.


Dfinir des contraintes

Contrainte au niveau colonne


column [CONSTRAINT constraint_name] constraint_type,

Contrainte au niveau table


column,...
[CONSTRAINT constraint_name] constraint_type
(column, ...),

10-6 Copyright Oracle Corporation, 2001. Tous droits rservs.


Contrainte NOT NULL

Interdit les valeurs NULL dans la colonne :

Contrainte NOT NULL Contrainte Absence de contrainte


(aucune ligne de cette NOT NULL NOT NULL
colonne ne peut (les lignes de cette
contenir de valeur colonne peuvent
NULL) contenir une valeur NULL)

10-7 Copyright Oracle Corporation, 2001. Tous droits rservs.


Contrainte NOT NULL

Cette contrainte est dfinie au niveau colonne :


CREATE TABLE employees(
employee_id NUMBER(6), Nom
last_name VARCHAR2(25) NOT NULL, attribu par
salary NUMBER(8,2), le systme
commission_pct NUMBER(2,2),
hire_date DATE Nom
CONSTRAINT emp_hire_date_nn attribu par
NOT NULL, l'utilisateur
...

10-8 Copyright Oracle Corporation, 2001. Tous droits rservs.


Contrainte UNIQUE

Contrainte UNIQUE
EMPLOYEES


INSERT INTO

Autoris
Non autoris :
existe dj

10-9 Copyright Oracle Corporation, 2001. Tous droits rservs.


Contrainte UNIQUE

Cette contrainte est dfinie au niveau table ou colonne :


CREATE TABLE employees(
employee_id NUMBER(6),
last_name VARCHAR2(25) NOT NULL,
email VARCHAR2(25),
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
hire_date DATE NOT NULL,
...
CONSTRAINT emp_email_uk UNIQUE(email));

10-10 Copyright Oracle Corporation, 2001. Tous droits rservs.


Contrainte PRIMARY KEY

DEPARTMENTS
PRIMARY KEY

Non autoris INSERT INTO


(valeur NULL)

Non autoris
(50 existe dj)

10-11 Copyright Oracle Corporation, 2001. Tous droits rservs.


Contrainte PRIMARY KEY

Cette contrainte est dfinie au niveau table ou colonne :

CREATE TABLE departments(


department_id NUMBER(4),
department_name VARCHAR2(30)
CONSTRAINT dept_name_nn NOT NULL,
manager_id NUMBER(6),
location_id NUMBER(4),
CONSTRAINT dept_id_pk PRIMARY KEY(department_id));

10-12 Copyright Oracle Corporation, 2001. Tous droits rservs.


Contrainte FOREIGN KEY
DEPARTMENTS

PRIMARY
KEY

EMPLOYEES
FOREIGN
KEY

Non autoris
INSERT INTO (9 n'existe
pas)
Autoris

10-13 Copyright Oracle Corporation, 2001. Tous droits rservs.


Contrainte FOREIGN KEY

Cette contrainte est dfinie au niveau table ou colonne :


CREATE TABLE employees(
employee_id NUMBER(6),
last_name VARCHAR2(25) NOT NULL,
email VARCHAR2(25),
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
hire_date DATE NOT NULL,
...
department_id NUMBER(4),
CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)
REFERENCES departments(department_id),
CONSTRAINT emp_email_uk UNIQUE(email));

10-14 Copyright Oracle Corporation, 2001. Tous droits rservs.


Mots-cls associs la contrainte
FOREIGN KEY

FOREIGN KEY : dfinit une colonne de la table


enfant au niveau table.
REFERENCES : identifie la table et la colonne dans
la table parent.
ON DELETE CASCADE : supprime les lignes
dpendantes de la table enfant lorsqu'une ligne de
la table parent est supprime.
ON DELETE SET NULL : affecte la valeur NULL aux
cls trangres dpendantes.

10-15 Copyright Oracle Corporation, 2001. Tous droits rservs.


Contrainte CHECK

Dfinit une condition que chaque ligne doit satisfaire.


Les expressions suivantes ne sont pas autorises :
Rfrences aux pseudo-colonnes CURRVAL, NEXTVAL,
LEVEL et ROWNUM
Appels des fonctions SYSDATE, UID, USER et USERENV
Interrogations faisant rfrence d'autres valeurs dans
d'autres lignes
..., salary NUMBER(2)
CONSTRAINT emp_salary_min
CHECK (salary > 0),...

10-16 Copyright Oracle Corporation, 2001. Tous droits rservs.


Ajouter une syntaxe de contrainte

Utilisez l'instruction ALTER TABLE pour :


ajouter ou supprimer une contrainte sans modifier
sa structure,
activer ou dsactiver des contraintes,
ajouter une contrainte NOT NULL l'aide de la
clause MODIFY.
ALTER TABLE table
ADD [CONSTRAINT constraint] type (column);

10-17 Copyright Oracle Corporation, 2001. Tous droits rservs.


Ajouter une contrainte

Ajoutez la table EMPLOYEES une contrainte FOREIGN


KEY prcisant qu'un manager doit dj exister dans
cette table en tant qu'employ valide.
ALTER TABLE employees
ADD CONSTRAINT emp_manager_fk
FOREIGN KEY(manager_id)
REFERENCES employees(employee_id);
Table altered.

10-18 Copyright Oracle Corporation, 2001. Tous droits rservs.


Supprimer une contrainte

Supprimez de la table EMPLOYEES la contrainte


relative au manager.
ALTER TABLE employees
DROP CONSTRAINT emp_manager_fk;
Table altered.

Supprimez la contrainte PRIMARY KEY de la table


DEPARTMENTS, ainsi que la contrainte FOREIGN
KEY associe dfinie sur la colonne
EMPLOYEES.DEPARTMENT_ID.
ALTER TABLE departments
DROP PRIMARY KEY CASCADE;
Table altered.

10-19 Copyright Oracle Corporation, 2001. Tous droits rservs.


Dsactiver des contraintes

Pour dsactiver une contrainte d'intgrit,


excutez la clause DISABLE de l'instruction ALTER
TABLE.
Pour dsactiver les contraintes d'intgrit
dpendantes, appliquez l'option CASCADE.

ALTER TABLE employees


DISABLE CONSTRAINT emp_emp_id_pk CASCADE;
Table altered.

10-20 Copyright Oracle Corporation, 2001. Tous droits rservs.


Activer des contraintes

Pour activer une contrainte d'intgrit dsactive


dans la dfinition de la table, utilisez la clause
ENABLE.

ALTER TABLE employees


ENABLE CONSTRAINT emp_emp_id_pk;
Table altered.

Si vous activez une contrainte de cl UNIQUE ou


PRIMARY KEY, un index correspondant est
automatiquement cr.

10-21 Copyright Oracle Corporation, 2001. Tous droits rservs.


Contraintes en cascade

La clause CASCADE CONSTRAINTS s'utilise avec la


clause DROP COLUMN.
La clause CASCADE CONSTRAINTS supprime
toutes les contraintes d'intgrit rfrentielle qui
font rfrence aux cls uniques et aux cls
primaires dfinies sur les colonnes supprimes.
La clause CASCADE CONSTRAINTS supprime
galement toutes les contraintes multicolonnes
des colonnes supprimes.

10-22 Copyright Oracle Corporation, 2001. Tous droits rservs.


Contraintes en cascade

Exemple :

ALTER TABLE test1


DROP (pk) CASCADE CONSTRAINTS;
Table altered.

ALTER TABLE test1


DROP (pk, fk, col1) CASCADE CONSTRAINTS;
Table altered.

10-23 Copyright Oracle Corporation, 2001. Tous droits rservs.


Afficher des contraintes

Pour afficher la dfinition et le nom de toutes les


contraintes, interrogez la table USER_CONSTRAINTS.
SELECT constraint_name, constraint_type,
search_condition
FROM user_constraints
WHERE table_name = 'EMPLOYEES';

10-24 Copyright Oracle Corporation, 2001. Tous droits rservs.


Afficher les colonnes associes des
contraintes

Affichez les colonnes associes aux noms de


contrainte l'aide de la vue USER_CONS_COLUMNS.
SELECT constraint_name, column_name
FROM user_cons_columns
WHERE table_name = 'EMPLOYEES';

10-25 Copyright Oracle Corporation, 2001. Tous droits rservs.


Synthse

Ce chapitre vous permis d'apprendre crer des


contraintes.
Types de contrainte :
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
Vous pouvez interroger la table
USER_CONSTRAINTS pour voir le nom et la
dfinition de toutes les contraintes.

10-26 Copyright Oracle Corporation, 2001. Tous droits rservs.


Prsentation de l'exercice 10

Dans cet exercice, vous allez :


ajouter des contraintes des tables existantes,
ajouter des colonnes une table,
afficher des informations provenant des vues du
dictionnaire de donnes.

10-27 Copyright Oracle Corporation, 2001. Tous droits rservs.

Das könnte Ihnen auch gefallen