Informations

La soumission de chaque TP se fait par mail. Le début de l'objet doit être : "[BD2][TPx] Rendu"

N'oubliez pas de compléter les trois premières séances du MOOC

TPs

pdf airbase cartrack
pdf
pdf
pdf
pdf movies artists
pdf

Astuces

Auto incrément

Trigger

Clé primaire

Pour modifier une clé primaire, on doit d'abord supprimer l'ancienne et créer la nouvelle, que la clé soit composée ou non.

ALTER TABLE table
DROP PRIMARY KEY;

ALTER TABLE table
ADD PRIMARY KEY (...)

Délimiteur

MySQL considère le point-virgule comme le délimiteur d'instruction par défaut. Cela pose problème lors de la définition de TRIGGER, car le corps du TRIGGER contient des instructions séparées par un point-virgule. Ce qui signifie que lors de l'exécution du TRIGGER, MySQL s'arrête au premier point-virgule qu'il rencontre et considère tous ce qu'il y a devant comme une instruction. Par exemple:

CREATE TRIGGER myTriggger BEFORE INSERT ON myTable
FOR EACH ROW
BEGIN
IF NEW.myColumn > 10 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'My error has occured';
END;
Dans ce cas MySQL considère que :
CREATE TRIGGER myTriggger BEFORE INSERT ON myTable
FOR EACH ROW
BEGIN
IF NEW.myColumn > 10 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'My error has occured';
est une instruction et plante. Pour résoudre le problème on change le délimiteur par défaut.
DELIMITER //
CREATE TRIGGER myTriggger BEFORE INSERT ON myTable
FOR EACH ROW
BEGIN
IF NEW.myColumn > 10 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'My error has occured';
END;
//
DELIMITER ;
On rétabli le point-virgule à la fin.

Liens utiles

PostgreSQL
MySQL (doc)