Bases de données 2 (Polytech)
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 cartrackpdf movies artists
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
PostgreSQLMySQL (doc)