Uploaded by hiba adel

TP1 M2 BD 100603

advertisement
UMBB/FS/DI/23-24 Programmation et administration des bases de données
Master 2 (S3)/(Dr Djerbi)
TP 1 : Clés étrangères :
Enoncé
Exécuter les requêtes suivantes afin d’en créer les tables () dans votre base de données (à créer
la BD « tp_x_m2_fk » comme suit : CREATE DATABASE `tp_x_m2_FK`;).
CREATE TABLE product (
category INT NOT NULL, id INT NOT NULL,
price DECIMAL,
PRIMARY KEY(category, id)
) ENGINE=INNODB;
CREATE TABLE customer (
id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE product_order (
no INT NOT NULL AUTO_INCREMENT,
product_category INT NOT NULL,
product_id INT NOT NULL,
customer_id INT NOT NULL,
PRIMARY KEY(no),
INDEX (product_category, product_id),
INDEX (customer_id),
FOREIGN KEY (product_category, product_id)
REFERENCES product(category, id)
ON UPDATE CASCADE ON DELETE RESTRICT,
FOREIGN KEY (customer_id)
REFERENCES customer(id)
) ENGINE=INNODB;
DR DJERBI 23-24
1
UMBB/FS/DI/23-24 Programmation et administration des bases de données
Master 2 (S3)/(Dr Djerbi)
Veuillez remplir ces trois tables comme suit :
1- Veuillez modifier le troisième enregistrement de la table « customer » de la valeur 3
vers la valeur 4, comme suit :
UPDATE `tp_x_m2_fk`.`customer` SET `id`='4' WHERE `id`=3;
2- Avez-vous pu le faire ? pourquoi ?
3- Faire la même chose avec le premier enregistrement, et répondre à la même question.
4- Veuillez supprimer le troisième enregistrement de la table « customer », comme suit :
DELETE FROM `tp_x_m2_fk`.`customer` WHERE `id`=3;
5- Avez-vous pu le faire ? pourquoi ?
6- Faire la même chose avec le premier enregistrement, et répondre à la même question.
7- Supprimer tous les enregistrements de la table (product_order) ayant customer_id =1
avec
la
requête
suivante :
delete
from
product_order
where
product_order.customer_id=1;
8- Puis refaire les mêmes question ci-dessus, qu'est-ce passe-t-il? .
9- Fait voir les trois NBs suivantes avant de procéder à la réponse. Refaire ces mêmes
questions (avec les mêmes données avant suppression) en changeant les mots clés
rouges de la requête de création de la table (product_order) avec les valeurs (NO
ACTION), que remarquez-vous ?.
DR DJERBI 23-24
2
UMBB/FS/DI/23-24 Programmation et administration des bases de données
Master 2 (S3)/(Dr Djerbi)
NBs :
a. Vous pouvez renommer cette table comme suit :

RENAME TABLE `product_order` TO `product_order2`;
b. Ou, vous pouvez exécuter les deux requêtes suivantes pour en changer ces
CI (CONSTRAINT) :

ALTER TABLE `product_order`
DROP FOREIGN KEY `product_order_ibfk_2`;

ALTER TABLE `product_order`
ADD CONSTRAINT `product_order_ibfk_2` FOREIGN KEY
(`customer_id`) REFERENCES `customer` (`id`) ON UPDATE
NO ACTION ON DELETE NO ACTION;
c. L’identificateur (`product_order_ibfk_2`) fait référence à la CI de la clé
étrangère, pour connaitre les noms de vos CI, il faut exécuter (avant toute
modification) la requête suivante :
SHOW CREATE TABLE tp_x_m2_fk.`product_order2`
Qui
vous
affichera
tout
ce
qui
concerne
(tp_x_m2_fk.`product_order2`) y compris ses CI comme suit :
votre
table
CREATE TABLE `product_order2` (
`no` int(11) NOT NULL AUTO_INCREMENT,
`product_category` int(11) NOT NULL,
`product_id` int(11) NOT NULL,
`customer_id` int(11) NOT NULL,
PRIMARY KEY (`no`),
KEY `product_category` (`product_category`,`product_id`),
KEY `customer_id` (`customer_id`),
CONSTRAINT
`product_order_ibfk_1`
FOREIGN
KEY
(`product_category`, `product_id`) REFERENCES `product` (`category`, `id`)
ON UPDATE CASCADE,
CONSTRAINT `product_order_ibfk_2` FOREIGN KEY (`customer_id`)
REFERENCES `customer` (`id`) ON DELETE NO ACTION ON UPDATE
NO ACTION
)
ENGINE=InnoDB
AUTO_INCREMENT=4
DEFAULT
CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
10- Refaire ces mêmes questions (avec les mêmes données avant suppression) en changeant
les mots clés rouges de la requête de création de la table (product_order) avec les valeurs
(CASCADE, RESTRICT, SET NULL) pour (DELETE et UPDATE), que
remarquez-vous ?
DR DJERBI 23-24
3
Download