118
Chapitre 5 • Le langage SQL DML
précisé, le comportement du SGBD en cas de suppression ou de modification en
présence d’une contrainte référentielle est plus nuancé.
Considérons par exemple la sous-structure constituée des tables CLIENT et
COMMANDE.
create table CLIENT ( NCLI char(10) not null,
...,
primary key (NCLI) )
create table COMMANDE ( NCOM char(12) not null,
NCLI char(10) not null,
...,
primary key (NCOM),
foreign key (NCLI) references CLIENT)
Lors de la suppression d’une ligne de CLIENT, trois types de comportement sont
possibles :
• Blocage : la suppression est refusée s’il existe une ou plusieurs lignes de
COMMANDE
dépendantes
(c’est-à-dire
dont
COMMANDE.NCLI =
CLIENT.NCLI). On définit ce comportement comme suit 39 :
create table COMMANDE ( NCOM char(12) not null,
NCLI char(10) not null,
...,
primary key (NCOM),
foreign key (NCLI) references CLIENT
on delete no action)
• Propagation : la suppression est acceptée, mais elle entraîne la suppression
conjointe des lignes de COMMANDE dépendantes. On écrira alors :
create table COMMANDE ( NCOM char(12) not null,
NCLI char(10) not null,
...,
primary key (NCOM),
foreign key (NCLI) references CLIENT
on delete cascade)
• Découplage : la suppression est acceptée, mais les lignes dépendantes sont
rendues indépendantes par l’attribution de la valeur null à leur colonne
NCLI 40 . Ce comportement est spécifié comme suit :
create table COMMANDE ( NCOM char(12) not null,
NCLI char(10),
...,
primary key (NCOM),
39. Une variante est disponible dans certains SGBD : le mode restrict.
40. Il existe une variante set default, par laquelle la valeur par défaut se substitue à la valeur
null.
Précédent

- 118/436

Suivant