Enseignant: prof. Malchiodi (Università degli Studi di Milano)
TP: Triggers et procédures stockées
- Installer ipytyon-sql et pymysql afin de pouvoir effectuer des
requêtes directement dans jupyter: dans le anaconda prompt exécutez
conda install -c conda-forge ipython-sql
et après
conda install -c anaconda pymysql
.
- Lancer jupyter et dans un notebook se connecter à la BD
superheroes en utilisant
%load_ext
et
%sql
. Vérifier qu'il est possible d'effectuer une
SELECT avec %sql
.
- Créer une procédure stockée
get_smart_heroes
qui
retourne les lignes de la table heroes pour lesquelles
l'attribut intelligence est good ou high.
- Vérifier qu'il est possible de appeler
get_smart_heroes
soit directement dans un prompt de mySQL, soit dans jupyter en
utilisant %sql
, soit dans jupyter en utilisant
mysql.connector.
- Créer une procédure stockée
get_heroes_taller_than
qui retourne les héros qui sont plus hauts que la valeur passée
comme paramètre et vérifier qu'elle fonctionne correctement.
- Créer une procédure stockée
get_older_hero
qui
retourne l'héro le plus vieux (en considerant son age égale au
nombre d'années passées de first_appearance. Cette procedure
devra accepter deux arguments: p_gender
pour spécifier
le genre du héro et o_name
pour contenir
le résultat. Vérifier aussi dans ce cas que la procédure fonctionne
et qu'il est possible de l'utiliser dans les trois modalités
considérées (prompt mySQL, %sql et mysql.connector).
- Créer un trigger sur la table heroes qui assure qu'il n'est
pas possible d'insérer un héro dont le nom existe déjà dans une
autre ligne de la table.
- Ajouter, s'il le faut, des trigger similaires à celui du point
précédent mais qui font référence aux requêtes
UPDATE
et DELETE
.
- Créer une table archived_heroes qui contient tous les
attributs de la table heroes, et en plus:
- user (chaîne de 100 caractères),
- date (datetime).
- Créer un trigger qui archive les lignes effacées de la table
heroes, en le copiant dans archived_heroes et en y
ajoutant l'instant de élimination et l'usager qui a effectué
l'élimination.
- Créer une procédure stockée
restore_hero
qui accepte
comme argument l'ID d'un héro éliminé et récupère ses données (donc
il va copier une ligne de archived_heroes dans heroes
et après il va éliminer la ligne originale dans
archived_heroes.