DUT en Statistique et Informatique Décisionnelle, Université de la Côte d'Azur

Cours de Bases de données avancées 2018/19

Enseignant: prof. Malchiodi (Università degli Studi di Milano)

TP: Triggers et procédures stockées

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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).
  7. 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.
  8. 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.
  9. 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).
  10. 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.
  11. 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.