CCB Premier Import
This commit is contained in:
191
PPE2/ecole_trigger.sql
Normal file
191
PPE2/ecole_trigger.sql
Normal file
@@ -0,0 +1,191 @@
|
||||
Créer la base données Ecole :
|
||||
|
||||
Créer les tables suivantes :
|
||||
|
||||
Classe (idclasse, libelle, salle, nbEleves)
|
||||
Eleve (ideleve, civilite, nom, prenom, idclasse#)
|
||||
|
||||
|
||||
Create database Ecole;
|
||||
Use Ecole;
|
||||
Create table Classe(
|
||||
idclasse int (3) NOT NULL AUTO_INCREMENT,
|
||||
libelle varchar (10),
|
||||
salle varchar (15),
|
||||
nbEleves int(3),
|
||||
primary key(idclasse)
|
||||
);
|
||||
|
||||
Create table Eleve(
|
||||
ideleve int (3) NOT NULL AUTO_INCREMENT,
|
||||
civilite varchar(30),
|
||||
nom varchar(30),
|
||||
prenom varchar(30),
|
||||
idclasse int(3) NOT NULL,
|
||||
primary key (ideleve),
|
||||
foreign key (idclasse) references Classe (idclasse)
|
||||
);
|
||||
|
||||
insert into Classe values
|
||||
(null, "SIO SLAM 2", "salle 2", 0),
|
||||
(null, "SIO SISR 2", "salle 3", 1);
|
||||
|
||||
insert into Eleve values
|
||||
(null, "Monsieur", "Mozar", "Kevin", 2);
|
||||
insert into Eleve values
|
||||
(null, "Madame", "Marie", "Ellen", 1);
|
||||
|
||||
Afficher les triggers
|
||||
show triggers ;
|
||||
|
||||
Rappel : 6 triggers
|
||||
Action : avant before, apres after
|
||||
Requete : update, delete, insert
|
||||
Ancien enregistrement: old
|
||||
Nouveau enregistrement: new
|
||||
Old: quand il y a delete, update
|
||||
New: quand il y a insert, update
|
||||
Créer un trigger qui permet d incrementer le nb eleves de la classe
|
||||
à chaque insertion d un eleve
|
||||
|
||||
delimiter |
|
||||
create trigger After_insert_Eleve
|
||||
After insert on Eleve
|
||||
For each row
|
||||
Begin
|
||||
Update classe
|
||||
Set nbEleves = nbEleves + 1
|
||||
where idclasse = new.idclasse;
|
||||
End |
|
||||
delimiter ;
|
||||
|
||||
insert into Eleve values
|
||||
(null, "Madame", "Marie", "Ellen", 1);
|
||||
|
||||
Supprimer un trigger
|
||||
Drop trigger After_insert_Eleve ;
|
||||
|
||||
Créer un trigger qui permet de décrémenter le nombre d eleves
|
||||
à chaque suppression d un eleve de la classe.
|
||||
|
||||
delimiter |
|
||||
create trigger Alter_delete_Eleve
|
||||
After delete on Eleve
|
||||
For each row
|
||||
Begin
|
||||
update classe
|
||||
Set nbEleves = nbEleves -1
|
||||
where idclasse = old.idclasse;
|
||||
|
||||
end |
|
||||
delimiter ;
|
||||
|
||||
|
||||
delete from Eleve where ideleve=1;
|
||||
-- cree un trigger pour changer un eleve d'une classe à une autre
|
||||
|
||||
delimiter |
|
||||
create trigger After_Update_Eleve
|
||||
After update on Eleve
|
||||
For each row
|
||||
Begin
|
||||
update classe
|
||||
Set nbEleves = nbEleves -1
|
||||
where idclasse = old.idclasse;
|
||||
update classe
|
||||
Set nbEleves = nbEleves +1
|
||||
where idclasse = new.idclasse;
|
||||
End |
|
||||
delimiter ;
|
||||
|
||||
update eleve set idclasse=2 where ideleve = 2;
|
||||
|
||||
ecrire un trigger qui permet a chaque suppresion dun eleve de stocker
|
||||
dans une table a creer ancieneleve avec les memes champs aux quels on
|
||||
ajoute la date de la suppresion.
|
||||
|
||||
create table ancienEleve(
|
||||
idEleve int(3) NOT NULL AUTO_INCREMENT,
|
||||
civilite varchar(30),
|
||||
nom varchar(30),
|
||||
prenom varchar(30),
|
||||
dateDepart date,
|
||||
PRIMARY KEY (idEleve)
|
||||
);
|
||||
|
||||
delimiter |
|
||||
create trigger After_Delete_Eleve
|
||||
After delete on Eleve
|
||||
For each row
|
||||
Begin
|
||||
insert into ancienEleve values(
|
||||
null,
|
||||
old.civilite,
|
||||
old.nom,
|
||||
old.prenom,
|
||||
now()
|
||||
);
|
||||
end |
|
||||
delimiter ;
|
||||
|
||||
Trigger qui controle les donnees avant insertion.
|
||||
|
||||
Syntaxe :
|
||||
Alternative
|
||||
if condition then
|
||||
instruction SQL
|
||||
end ;
|
||||
if condition then
|
||||
instruction SQL
|
||||
else
|
||||
instruction SQL
|
||||
end;
|
||||
|
||||
Affectation
|
||||
Set champ = valeur ;
|
||||
Declaration
|
||||
Declare variable type ;
|
||||
Declare variable type default valeur;
|
||||
|
||||
Exo : ecrire un trigger qui verifie avant insertion que si la civilite
|
||||
n est pas Mr ou Mme, par defaut elle sera egal à Mr.
|
||||
|
||||
|
||||
delimiter |
|
||||
create trigger Before_Insert_Eleve
|
||||
Before insert on Eleve
|
||||
For each row
|
||||
|
||||
Begin
|
||||
if (new.civilite <> 'Mr' and new.civilite <> 'Mme') then
|
||||
set new.civilite = 'Mr';
|
||||
end if;
|
||||
end |
|
||||
|
||||
delimiter ;
|
||||
|
||||
ajouter le champ age dans la table eleve.
|
||||
Mettez ce champ a zero pour tous les eleves
|
||||
modifier le trigger qui verifie que si à l insertion le champ age est negatif
|
||||
on insere la valeur 0.
|
||||
|
||||
ALTER TABLE Eleve ADD age int(3);
|
||||
|
||||
update eleve set age = 0;
|
||||
|
||||
delimiter |
|
||||
create trigger Before_Insert_Eleve
|
||||
Before insert on Eleve
|
||||
For each row
|
||||
|
||||
Begin
|
||||
if (new.civilite <> 'Mr' and new.civilite <> 'Mme') then
|
||||
set new.civilite = 'Mr';
|
||||
end if;
|
||||
if (new.age < 0) then
|
||||
set new.age = 0;
|
||||
end if;
|
||||
end |
|
||||
|
||||
delimiter ;
|
||||
|
||||
Reference in New Issue
Block a user