Vous êtes sur la page 1sur 5

Bases de DSI2

données

ISET DE KEBILI
ON DELETE CASCADE/
ON DELETE SET NULL
Amélioration du contrôle de l'intégrité
Il permet de spécifier des corrections en cas de violation de contrainte :
 En supprimant en cas d'intégrité référentielle - ON DELETE CASCADE
 En rendre nul l'attribut référençant- ON DELETE SET NULL
La suppression en cascade permet de supprimer des occurrences dans des tables
liées par clé étrangère. Cependant cette suppression automatique sera définie au
moment de la définition de la clé étrangère.
L'utilisation de la clause ON DELETE CASCADE permet de détruire

Rochdy BELHASSEN
automatiquement des lignes filles quand arrive la destruction d'une occurrence liée
de la table parent. Sans cette spécification, l'option par défaut aurait été d'interdire la
destruction de données. L'avantage de cette option est la réduction d'instructions
SQL nécessaires pour détruire ces occurrences. En revanche, elle est à utiliser avec
précaution.
1. L’option ON DELETE CASCADE
Indique que la suppression d’une ligne de la table de référence va
entraîner automatiquement la suppression des lignes référencées.
Syntaxe :
FOREIGN KEY (attri) REFERENCES table (attri) ON DELETE CASCADE

Explications :
Exemple 1 :
CREATE TABLE CLASSE (
CODE_CLA VARCHAR2(6) ,
LIB_CLA VARCHAR2(4) ,
PRIMARY KEY (CODE_CLA));
// On va Créer la table ETUDIANT sans utiliser l’option ON DELETE CASCADE
CREATE TABLE ETUDIANT (
MATR_ETU VARCHAR2(6) ,
NOM_ETU VARCHAR2(20) ,
PREN_ETU VARCHAR2(20) ,
CODE_CLA VARCHAR2(6),
PRIMARY KEY (MATR_ETU ),
FOREIGN KEY (CODE_CLA) REFERENCES CLASSE (CODE_CLA));

ON DELETE CASCADE / ON DELETE SET NULL 1


Bases de DSI2
données

ISET DE KEBILI
INSERT INTO CLASSE VALUES (‘C00001’, ‘DSI2’);
INSERT INTO CLASSE VALUES (‘C00002’, ‘RSI2’);
INSERT INTO CLASSE VALUES (‘C00003’, ‘MSI2’);
INSERT INTO CLASSE VALUES (‘C00004’, ‘MDW2’);
INSERT INTO ETUDIANT VALUES (‘E00001’,’TOUNSI’, ‘MOHAMED’, ‘C00002’);
INSERT INTO ETUDIANT VALUES (‘E00002’,’DRIDI’, ‘SAFOUANE’, ‘C00001’);
INSERT INTO ETUDIANT VALUES (‘E00003’,’MAALI’, ‘SAWSEN’, ‘C00003’);

DELETE FROM CLASSE


WHERE CODE_CLA=’C00001’;
ERREUR à la ligne 1 :
ORA-02292: violation de contrainte (SYSTEM.SYS_C005773) d'intégrité
enregistrement fils existant

Rochdy BELHASSEN
Exemple 2 :

DROP TABLE ETUDIANT ;


DROP TABLE CLASSE ;

CREATE TABLE CLASSE (


CODE_CLA VARCHAR2(6) ,
LIB_CLA VARCHAR2(4) ,
PRIMARY KEY (CODE_CLA));
// On va Créer la table ETUDIANT en utilisant l’option ON DELETE CASCADE
CREATE TABLE ETUDIANT (
MATR_ETU VARCHAR2(6) ,
NOM_ETU VARCHAR2(20) ,
PREN_ETU VARCHAR2(20) ,
CODE_CLA VARCHAR2(6),
PRIMARY KEY (MATR_ETU ),
FOREIGN KEY (CODE_CLA) REFERENCES CLASSE (CODE_CLA) ON DELETE
CASCADE);

ON DELETE CASCADE / ON DELETE SET NULL 2


Bases de DSI2
données

ISET DE KEBILI
INSERT INTO CLASSE VALUES (‘C00001’, ‘DSI2’);
INSERT INTO CLASSE VALUES (‘C00002’, ‘RSI2’);
INSERT INTO CLASSE VALUES (‘C00003’, ‘MSI2’);
INSERT INTO CLASSE VALUES (‘C00004’, ‘MDW2’);

INSERT INTO ETUDIANT VALUES (‘E00001’,’TOUNSI’, ‘MOHAMED’, ‘C00002’);


INSERT INTO ETUDIANT VALUES (‘E00002’,’DRIDI’, ‘SAFOUANE’, ‘C00001’);
INSERT INTO ETUDIANT VALUES (‘E00003’,’MAALI’, ‘SAWSEN’, ‘C00003’);

Rochdy BELHASSEN
 La suppression d’un enregistrement de la table CLASSE (CODE_CLA=’C00001’)
entraîne la suppression des enregistrements correspondants dans la table
ETUDIANT (MATR_ETU=’E0002’).

ON DELETE CASCADE / ON DELETE SET NULL 3


Bases de DSI2
données

ISET DE KEBILI
2. L’option ON DELETE SET NULL

Indique que la suppression d’une ligne de la table de référence, l'attribut


référençant prend la valeur NULL.
Syntaxe :
FOREIGN KEY (attri) REFERENCES table (attri) ON DELETE SET NULL
Explication :
Exemple 3 :
DROP TABLE ETUDIANT ;
DROP TABLE CLASSE ;

CREATE TABLE CLASSE (


CODE_CLA VARCHAR2(6) ,
LIB_CLA VARCHAR2(4) ,
PRIMARY KEY (CODE_CLA));
CREATE TABLE ETUDIANT (
MATR_ETU VARCHAR2(6) ,

Rochdy BELHASSEN
NOM_ETU VARCHAR2(20) ,
PREN_ETU VARCHAR2(20) ,
CODE_CLA VARCHAR2(6),
PRIMARY KEY (MATR_ETU ),
FOREIGN KEY (CODE_CLA) REFERENCES CLASSE (CODE_CLA) ON DELETE SET
NULL);

INSERT INTO CLASSE VALUES (‘C00001’, ‘DSI2’);


INSERT INTO CLASSE VALUES (‘C00002’, ‘RSI2’);
INSERT INTO CLASSE VALUES (‘C00003’, ‘MSI2’);
INSERT INTO CLASSE VALUES (‘C00004’, ‘MDW2’);
INSERT INTO ETUDIANT VALUES (‘E00001’,’TOUNSI’, ‘MOHAMED’, ‘C00002’);
INSERT INTO ETUDIANT VALUES (‘E00002’,’DRIDI’, ‘SAFOUANE’, ‘C00001’);
INSERT INTO ETUDIANT VALUES (‘E00003’,’MAALI’, ‘SAWSEN’, ‘C00003’);

ON DELETE CASCADE / ON DELETE SET NULL 4


Bases de DSI2
données

ISET DE KEBILI
Rochdy BELHASSEN

ON DELETE CASCADE / ON DELETE SET NULL 5

Vous aimerez peut-être aussi