SQL: Interrogation et Gestion de Bases de Données
45 Questions
0 Views

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson

Questions and Answers

Dans le contexte des bases de données, quel est le rôle principal du langage SQL (Structured Query Language) ?

  • La gestion et la manipulation des données stockées dans un système de gestion de base de données (SGBD). (correct)
  • La configuration du matériel serveur hébergeant la base de données.
  • La conception de l'interface utilisateur des applications accédant aux données.
  • La création de graphiques et de visualisations à partir des données.

Si vous devez extraire des informations spécifiques de plusieurs tables liées dans une base de données, quelle opération SQL serait la plus appropriée ?

  • Une requête `UPDATE` pour modifier les données.
  • Une requête `JOIN` pour combiner les données des tables. (correct)
  • Une requête `CREATE TABLE` pour créer une nouvelle table.
  • Une requête `DELETE` pour supprimer les données.

Quelle est la différence fondamentale entre une commande DELETE et une commande TRUNCATE en SQL ?

  • `DELETE` réinitialise l'auto-incrémentation, tandis que `TRUNCATE` ne le fait pas.
  • `DELETE` est plus rapide que `TRUNCATE`.
  • `DELETE` peut être utilisée avec une clause `WHERE` pour supprimer des lignes spécifiques, tandis que `TRUNCATE` supprime toutes les lignes d'une table. (correct)
  • `DELETE` supprime la table entière, tandis que `TRUNCATE` ne supprime que les données.

Vous souhaitez modifier la structure d'une table existante, par exemple, ajouter une nouvelle colonne. Quelle commande SQL utiliseriez-vous ?

<p><code>ALTER TABLE</code> (D)</p> Signup and view all the answers

Comment assurer l'intégrité référentielle entre deux tables dans une base de données relationnelle utilisant SQL?

<p>En utilisant une contrainte de clé étrangère (<code>FOREIGN KEY</code>) qui référence la clé primaire d'une autre table. (A)</p> Signup and view all the answers

Quelle commande est utilisée pour modifier le délimiteur par défaut dans SQL avant de créer une procédure stockée?

<p>DELIMITER (C)</p> Signup and view all the answers

Quelle est la syntaxe correcte pour appeler une procédure stockée nommée calculer_total avec un paramètre d'entrée @valeur?

<p>CALL calculer_total(@valeur); (C)</p> Signup and view all the answers

Quelle commande SQL est utilisée pour supprimer une procédure stockée existante nommée mettre_a_jour_stock?

<p>DROP PROCEDURE mettre_a_jour_stock; (C)</p> Signup and view all the answers

Dans la création d'une procédure stockée, quel mot-clé est utilisé pour définir un paramètre qui renvoie une valeur à l'appelant?

<p>OUTPUT (B)</p> Signup and view all the answers

Comment déclarer une variable locale nommée compteur de type entier dans une procédure stockée?

<p>DECLARE compteur INTEGER; (B)</p> Signup and view all the answers

Quelle est la fonction d'une condition IF dans une procédure stockée?

<p>Exécuter un bloc de code si une condition est vraie. (B)</p> Signup and view all the answers

Quelle est la fonction d'une boucle WHILE dans une procédure stockée?

<p>Exécuter un bloc de code tant qu'une condition est vraie. (B)</p> Signup and view all the answers

Dans une procédure stockée, comment affecter le résultat d'une requête SELECT COUNT(*) à une variable de sortie nommée total?

<p>SELECT COUNT(*) INTO total FROM table; (A)</p> Signup and view all the answers

Quelle commande est utilisée pour supprimer un trigger dans une base de données ?

<p>DROP TRIGGER nom_trigger; (C)</p> Signup and view all the answers

Comment peut-on s'assurer qu'un trigger s'exécute avant un autre trigger sur la même table et le même événement ?

<p>En utilisant la clause <code>PRECEDES</code> lors de la création du trigger. (C)</p> Signup and view all the answers

Quelle commande permet d'afficher la liste de tous les triggers définis dans une base de données ?

<p>SHOW TRIGGERS; (B)</p> Signup and view all the answers

Quel est le principal avantage d'utiliser une vue dans une base de données ?

<p>Simplifier les requêtes complexes et masquer la complexité de la structure des tables sous-jacentes. (C)</p> Signup and view all the answers

Où est stockée la définition d'une vue dans une base de données ?

<p>Dans la base de données, comme les tables et les procédures stockées. (C)</p> Signup and view all the answers

Quel avantage les vues offrent-elles en termes de sécurité des données ?

<p>Elles permettent de masquer certaines colonnes ou lignes de tables, limitant ainsi l'accès aux données sensibles. (C)</p> Signup and view all the answers

Quelle est la principale différence entre une vue et une table dans une base de données ?

<p>Une table stocke physiquement les données, tandis qu'une vue ne stocke que la requête qui permet de récupérer les données. (D)</p> Signup and view all the answers

Quelle est la syntaxe correcte pour créer une vue nommée 'clients_actifs' qui sélectionne tous les clients dont le statut est 'actif' ?

<p>CREATE VIEW clients_actifs AS SELECT * FROM clients WHERE statut = 'actif'; (D)</p> Signup and view all the answers

Quelle est la conséquence de ne pas spécifier l'hôte lors de la suppression d'un utilisateur avec la commande DROP USER ?

<p>Cela empêche la suppression de l'utilisateur. (D)</p> Signup and view all the answers

Dans le contexte des bases de données, quelle est la principale différence entre un verrou partagé et un verrou exclusif?

<p>Un verrou partagé permet la lecture mais pas la modification des données, tandis qu'un verrou exclusif interdit à la fois la lecture et la modification. (B)</p> Signup and view all the answers

Comment afficher les privilèges actuels de l'utilisateur connecté et les privilèges issus des rôles qui lui sont attribués dans MySQL 8.0 et versions ultérieures ?

<p>SHOW GRANTS USING role1, role2, ...; (D)</p> Signup and view all the answers

Quelle table de la base de données INFORMATION_SCHEMA permet de déterminer quels utilisateurs ont le droit d'accorder des privilèges spécifiques ?

<p>USER_PRIVILEGES (D)</p> Signup and view all the answers

Comment un verrou partagé peut-il être implémenté lors d'une requête SELECT dans un système de gestion de bases de données relationnelles (SGBDR)?

<p>En utilisant la clause <code>LOCK IN SHARE MODE</code> à la fin de la requête <code>SELECT</code>. (C)</p> Signup and view all the answers

Un utilisateur A possède le privilège SELECT sur une table. Il crée ensuite une procédure stockée qui effectue une opération de SELECT sur cette même table. Quel(s) privilège(s) l'utilisateur B doit-il posséder pour exécuter cette procédure stockée ?

<p>L'utilisateur B doit posséder le privilège EXECUTE sur la procédure stockée seulement. (B)</p> Signup and view all the answers

Dans le cadre d'une transaction, quand les verrous de lignes sont-ils libérés?

<p>Seulement après un <code>COMMIT</code> ou un <code>ROLLBACK</code>. (D)</p> Signup and view all the answers

Lors de la création d'un trigger, quelle clause permet de spécifier l'utilisateur dont les privilèges seront utilisés pour la définition du trigger et quel privilège global est nécessaire pour utiliser cette clause ?

<p><code>DEFINER</code> et le privilège <code>SUPER</code> (A)</p> Signup and view all the answers

Lorsqu'un verrou de ligne est placé sur une colonne non indexée, quel est l'impact sur la table?

<p>Toutes les lignes de la table sont bloquées. (B)</p> Signup and view all the answers

Quelle est la différence entre l'utilisation de SET GLOBAL TRANSACTION ISOLATION LEVEL et SET SESSION TRANSACTION ISOLATION LEVEL?

<p><code>GLOBAL</code> affecte tous les utilisateurs du système, tandis que <code>SESSION</code> affecte uniquement la session courante. (A)</p> Signup and view all the answers

Comment renommer un utilisateur ancien_nom hébergé sur serveur1 en nouveau_nom tout en conservant le même hôte?

<p>RENAME USER 'ancien_nom'@'serveur1' TO 'nouveau_nom'@'serveur1'; (C)</p> Signup and view all the answers

Quelle est la différence entre l'utilisation de GRANT ... WITH GRANT OPTION et GRANT OPTION lors de l'attribution de privilèges?

<p><code>GRANT ... WITH GRANT OPTION</code> peut être utilisé avec <code>ALL</code>, alors que <code>GRANT OPTION</code> ne le peut pas. Les deux permettent d'accorder le privilège de transmettre les droits. (D)</p> Signup and view all the answers

Quel niveau d'isolation de transaction garantit qu'une lecture répétée non verrouillée donnera toujours le même résultat, sans tenir compte des autres sessions?

<p><code>REPEATABLE READ</code> (B)</p> Signup and view all the answers

Dans quel niveau d'isolation de transaction un SELECT non verrouillé peut-il potentiellement lire des données qui n'ont pas encore été validées (COMMIT) par d'autres sessions?

<p><code>READ UNCOMMITTED</code> (D)</p> Signup and view all the answers

Un utilisateur accorde un privilège à un autre utilisateur avec l'option WITH GRANT OPTION. Plus tard, l'utilisateur initial perd ce privilège. Qu'arrive-t-il au privilège accordé à l'autre utilisateur?

<p>Le privilège de l'autre utilisateur est automatiquement révoqué. (B)</p> Signup and view all the answers

Quel est l'effet du niveau d'isolation SERIALIZABLE sur les requêtes SELECT non verrouillées?

<p>Il transforme tous les <code>SELECT</code> non verrouillés en <code>SELECT ... LOCK IN SHARE MODE</code>. (B)</p> Signup and view all the answers

Dans quel contexte les tables temporaires sont-elles particulièrement utiles?

<p>Pour effectuer des tests sur une table avant d'appliquer des opérations sur la table permanente. (C)</p> Signup and view all the answers

Quelle est la principale différence entre une vue traditionnelle et une vue matérialisée, en considérant les SGBD qui supportent les vues matérialisées?

<p>Une vue traditionnelle contient la requête de sélection, tandis qu'une vue matérialisée contient directement le résultat de la requête. (A)</p> Signup and view all the answers

Quelle est la commande SQL utilisée pour supprimer rapidement toutes les données d'une table tout en recréant sa structure, et quelles sont ses implications concernant les clés étrangères?

<p><code>TRUNCATE</code>, qui supprime toutes les lignes et recrée la structure, ignorant les clés étrangères et ne permettant pas de <code>ROLLBACK</code>. (B)</p> Signup and view all the answers

Comment peut-on mettre à jour une vue matérialisée afin de refléter les changements dans les tables sous-jacentes?

<p>Soit à la demande via une procédure qui vide et remplit la vue, soit automatiquement via des triggers. (C)</p> Signup and view all the answers

Quelle est la conséquence de l'utilisation de l'option SQL_NO_CACHE dans une requête SELECT?

<p>Cela empêche MySQL de mettre en cache le résultat de la requête, forçant ainsi un nouveau calcul à chaque exécution. (B)</p> Signup and view all the answers

Dans un scénario où vous devez exécuter des requêtes complexes sur des données qui ne sont pas fréquemment mises à jour, quel type d'objet de base de données offrirait probablement les meilleures performances?

<p>Une vue matérialisée, car elle stocke le résultat précalculé de la requête. (D)</p> Signup and view all the answers

Pourquoi l'utilisation de triggers pour la mise à jour automatique des vues matérialisées pourrait-elle ne pas être optimale dans certains cas?

<p>Les triggers consomment des ressources importantes lors de chaque modification de la table, ce qui peut ralentir les opérations d'écriture. (C)</p> Signup and view all the answers

Dans quelle situation serait-il particulièrement avantageux de créer une vue matérialisée dans une base de données?

<p>Pour les requêtes impliquant des <code>TEMPTABLE</code> et des données qui ne sont pas mises à jour fréquemment. (C)</p> Signup and view all the answers

Flashcards

Qu'est-ce que SQL?

SQL est un langage standard pour la gestion de bases de données relationnelles.

UE 219, c'est quoi?

L'UE 219 est un cours sur les bases de données et le langage SQL.

HELHa, c'est où?

HELHa (Haute École Louvain en Hainaut) est l'institution où ce cours est enseigné.

Campus de Mons?

Mons est le campus de HELHa où le cours est donné.

Signup and view all the flashcards

IRAM?

L'IRAM fait partie du campus de Mons où se déroule le cours.

Signup and view all the flashcards

GRANT OPTION

Permet d'accorder à un utilisateur le droit d'accorder lui-même des privilèges.

Signup and view all the flashcards

DROP USER

Supprime un utilisateur de la base de données.

Signup and view all the flashcards

RENAME USER

Remplace l'ancien nom d'utilisateur par un nouveau nom d'utilisateur.

Signup and view all the flashcards

SHOW GRANTS

Affiche les privilèges de l'utilisateur actuel.

Signup and view all the flashcards

Afficher les utilisateurs et les droits

Affiche la liste des utilisateurs et leurs privilèges (nécessite d'accéder à la base de données MYSQL).

Signup and view all the flashcards

Droits d'exécution

Dans les triggers, procédures stockées ou vues, l'utilisateur qui EXÉCUTE doit avoir les droits, pas forcément celui qui les a créés.

Signup and view all the flashcards

DEFINER

Définit l'utilisateur responsable de la définition d'un trigger, d'une procédure stockée ou d'une vue. Nécessite le privilège SUPER.

Signup and view all the flashcards

Utilisateur par défaut

Par défaut, c’est l'utilisateur actuellement connecté : CURRENT_USER( ) qui est sélectionné.

Signup and view all the flashcards

Verrou Partagé

Permet la lecture, mais pas la modification des données.

Signup and view all the flashcards

Verrou Exclusif

Interdit la lecture et la modification des données. Assure l'intégrité lors des opérations.

Signup and view all the flashcards

Comment insérer un verrou partagé ?

Ajouter LOCK IN SHARE MODE à la fin d'une requête SELECT.

Signup and view all the flashcards

Comment insérer un verrou exclusif ?

Ajouter FOR UPDATE à la fin d'une requête SELECT.

Signup and view all the flashcards

Quand les verrous de ligne sont-ils libérés ?

À la fin de la requête (sans transaction) ou après un COMMIT ou ROLLBACK (dans une transaction).

Signup and view all the flashcards

Impact d'un verrou sur une colonne non indexée

Sur une colonne non indexée, toutes les lignes de la table sont bloquées, pas seulement les lignes souhaitées.

Signup and view all the flashcards

Niveaux d'isolation des transactions

REPEATABLE READ (lecture répétée donne le même résultat), READ COMMITTED (mise à jour avec les données validées), READ UNCOMMITTED (voit toutes les modifications), SERIALIZABLE (verrou partagé sur les SELECT).

Signup and view all the flashcards

Comportement de SERIALIZABLE

Avec SERIALIZABLE, tous les SELECT non verrouillés sont transformés en SELECT ... LOCK IN SHARE MODE.

Signup and view all the flashcards

Changer de délimiteur

Change le délimiteur de commande par défaut (;) par un autre, ici '|'. Utile pour définir des procédures stockées.

Signup and view all the flashcards

Créer une procédure stockée

Crée une procédure stockée appelée augmentation_prix qui prend un pourcentage en argument et met à jour le prix conseillé des livres.

Signup and view all the flashcards

Appeler une procédure stockée

Exécute une procédure stockée nommée augmentation_prix avec un paramètre @augm défini à 0.1.

Signup and view all the flashcards

Supprimer une procédure stockée

Supprime la procédure stockée nommée augmentation_prix de la base de données.

Signup and view all the flashcards

Procédure avec paramètre et résultat

Crée une procédure nombre_livres_plus_pages qui prend un nombre de pages en entrée et renvoie le nombre de livres ayant plus de pages.

Signup and view all the flashcards

Procédure avec variable locale et condition

Crée une procédure prix_pages qui ajuste les prix des livres en fonction d'une moyenne et d'un prix maximum, en utilisant une variable locale et une condition.

Signup and view all the flashcards

Procédure avec boucle et variables

Crée une procédure aug_prix_moyenne qui augmente les prix des livres tant que le prix moyen est inférieur à une valeur donnée, en utilisant une boucle WHILE.

Signup and view all the flashcards

Paramètres IN et OUT

Pour créer une procédure stockée qui reçoit des paramètres et retourne un résultat, on utilise les mots-clés IN pour les paramètres d'entrée et OUT pour les paramètres de sortie.

Signup and view all the flashcards

Tables temporaires

Tables créées temporairement pour stocker des résultats intermédiaires ou tester des opérations avant de les appliquer sur des tables permanentes.

Signup and view all the flashcards

Vue matérialisée

Contrairement à une vue standard, elle stocke le résultat de la requête, pas la requête elle-même.

Signup and view all the flashcards

TRUNCATE

Supprime rapidement toutes les lignes d'une table et recrée sa structure.

Signup and view all the flashcards

ROLLBACK et TRUNCATE

TRUNCATE valide une transaction et ne permet pas de ROLLBACK.

Signup and view all the flashcards

Mise à jour d'une vue matérialisée

Vider et remplir la vue périodiquement, ou utiliser des triggers pour une mise à jour automatique.

Signup and view all the flashcards

SQL_NO_CACHE

Empêche MySQL de mettre en cache le résultat d'une requête.

Signup and view all the flashcards

Quand utiliser les vues matérialisées?

Pour les requêtes complexes et les données rarement mises à jour.

Signup and view all the flashcards

Triggers et vues matérialisées

Les triggers sont utilisés pour mettre à jour automatiquement une vue matérialisée lors de modifications des tables sous-jacentes.

Signup and view all the flashcards

Qu'est-ce qu'un trigger (déclencheur)?

Un bloc de code qui s'exécute automatiquement en réponse à certains événements sur une table.

Signup and view all the flashcards

A quoi sert DELIMITER?

Utilisé pour définir un délimiteur personnalisé, souvent utilisé dans la création de triggers.

Signup and view all the flashcards

Que fait DROP TRIGGER?

Il supprime un trigger existant.

Signup and view all the flashcards

A quoi sert PRECEDES dans un trigger?

Permet de spécifier l'ordre d'exécution des triggers qui partagent le même moment/événement sur une table.

Signup and view all the flashcards

Que fait SHOW TRIGGERS?

Affiche la liste des triggers disponibles dans la base de données.

Signup and view all the flashcards

Qu'est-ce qu'une vue (view)?

Une requête mémorisée, stockée dans la base de données.

Signup and view all the flashcards

Quel est l'intérêt d'utiliser les vues?

Simplifier des requêtes complexes et gérer les interactions avec des applications externes.

Signup and view all the flashcards

Comment les vues améliorent-elles la sécurité?

Elle permet d'affiner les droits d'accès aux données.

Signup and view all the flashcards

Study Notes

  • Il y a deux fichiers schéma contenant des informations: information_schema et performance_schema
  • Les informations sur les tables sont sur information_schema
  • performance_schema contient les infos sur les actions liées au serveur
  • Les infos sur le serveur comme les utilisateurs et leurs privilèges sont dans mysql
  • Les privilèges peuvent s'appliquer aux bases de données, tables, vues
  • Les privilèges suivants peuvent être attribués aux utilisateurs pour la gestion des enregistrements: SELECT, INSERT, UPDATE, DELETE
  • Les privilèges suivants peuvent être attribués aux utilisateurs pour la gestion de la structure des tables : CREATE, CREATE TEMPORARY TABLES, CREATE VIEW, ALTER, DROP
  • Les privilèges suivants pour les bases de données: CREATE ROUTINE, ALTER ROUTINE, EXECUTE, INDEX, TRIGGER, LOCK TABLES, CREATE USER

Signification et niveaux accordables des privilèges

  • ALL [PRIVILEGES]: Accorde tous les privilèges au niveau d'accès spécifié, sauf GRANT OPTION
  • ALTER: Permet d'utiliser ALTER TABLE. Niveaux: Global, base de données, table
  • ALTER ROUTINE: Permet d'altérer ou de supprimer des routines stockées. Niveaux: Global, base de données, procédure
  • CREATE: Permet de créer des bases de données et des tables. Niveaux: Global, base de données, table
  • CREATE ROUTINE: Permet de créer des routines stockées. Niveaux: Global, base de données
  • CREATE TABLESPACE: Permet de créer, d'altérer ou de supprimer des espaces de tables et des groupes de fichiers journaux. Niveau: Global
  • CREATE TEMPORARY TABLES: Permet d'utiliser CREATE TEMPORARY TABLE. Niveaux: Global, base de données
  • CREATE USER: Permet d'utiliser CREATE USER, DROP USER, RENAME USER et REVOKE ALL PRIVILEGES. Niveau: Global
  • CREATE VIEW: Permet de créer ou d'altérer des vues. Niveaux: Global, base de données, table
  • DELETE: Permet d'utiliser DELETE. Niveau: Global, base de données, table
  • DROP: Permet de supprimer des bases de données, des tables et des vues. Niveaux: Global, base de données, table
  • EVENT: Permet d'utiliser des événements pour l'Event Scheduler. Niveaux: Global, base de données
  • EXECUTE: Permet à l'utilisateur d'exécuter des routines stockées. Niveaux: Global, base de données, table
  • FILE: Permet à l'utilisateur de demander au serveur de lire ou d'écrire des fichiers. Niveau: Global
  • GRANT OPTION: Autorise l'octroi ou la suppression de privilèges à d'autres comptes. Niveaux: Global, base de données, table, procédure, proxy
  • INDEX: Permet de créer ou de supprimer des index. Niveaux: Global, base de données, table
  • INSERT: Permet d'utiliser INSERT. Niveaux: Global, base de données, table, colonne
  • LOCK TABLES: Permet d'utiliser LOCK TABLES sur les tables pour lesquelles vous avez le privilège SELECT. Niveaux: Global, base de données
  • PROCESS: Permet à l'utilisateur de voir tous les processus avec SHOW PROCESSLIST. Niveau: Global
  • PROXY: Permet le proxy utilisateur. Niveau: D'un utilisateur à un autre
  • REFERENCES: Autorise la création de clés étrangères. Niveaux: Global, base de données, table, colonne
  • RELOAD: Permet d'utiliser les opérations FLUSH. Niveau: Global
  • REPLICATION CLIENT: Permet à l'utilisateur de demander où se trouvent les serveurs maître ou esclave. Niveau: Global
  • REPLICATION SLAVE: Permet aux esclaves de réplication de lire les événements du journal binaire depuis le maître. Niveau: Global
  • SELECT: Permet d'utiliser SELECT. Niveaux: Global, base de données, table, colonne
  • SHOW DATABASES: Permet à SHOW DATABASES d'afficher toutes les bases de données. Niveau: Global
  • SHOW VIEW: Permet d'utiliser SHOW CREATE VIEW. Niveaux: Global, base de données, table
  • SHUTDOWN: Permet d'utiliser mysqladmin shutdown. Niveau: Global
  • SUPER: Permet d'utiliser d'autres opérations administratives telles que CHANGE MASTER TO, KILL, PURGE BINARY LOGS, SET GLOBAL et mysqladmin debug. Niveau: Global
  • TRIGGER: Active les opérations de déclenchement. Niveaux: Global, base de données, table
  • UPDATE: Permet d'utiliser UPDATE. Niveaux: Global, base de données, table, colonne
  • USAGE: Synonyme de "no privileges" (aucun privilège)
  • Il faut préciser quelle est sa portée du privilège accordé

Syntaxe du CREATE USER et ALTER USER

  • IDENTIFIED [WITH méthodes d'authentification BY motdepasse
  • DEFAULT ROLE role1 [, role2] : il est possible d'assigner aux utilisateurs un rôle
  • GRANT pour attribuer les droits directement au rôle plutôt qu'à un utilisateur
  • WITH options: MAX_QUERIES_PER_HOUR, MAX_UPDATES_PER_HOUR, MAX_CONNECTIONS_PER_HOUR

  • PASSWORD EXPIRE INTERVAL x DAY: obligatoirement le changement régulier de mot de passe

  • PASSWORD HISTORY 3: nombre d'anciens mots de passe à retenir

  • FAILED_LOGIN_ATTEMPTS suivi de la valeur souhaité : nombre de tentatives de connexion avant blocage du compte

  • PASSWORD_LOCK_TIME suivi du nombre de jours : nombre de jours de blocage du compte

  • ACCOUNT LOCK ou UNLOCK: verrouiller le compte (ou le déverrouiller)

  • GRANT privilege [(col1, col2,...)] [, privilege [(col1, col2,...)], ...] ON [type_objet] niveau_privilege TO user [IDENTIFIED BY ‘mot_de_passe’] ajoute des privilèges

  • RENAME USER ‘ancien_nom'@'nom_hote’TO 'nouv_nom'@'nom_hote’ permet de renommer un utilisateur

  • SHOW GRANTS permet de voir les droits de l'utilisateur qui a ouvert la session Si l'utilisateur est lié à un ou des rôles alors, pour avoir le contenu des rôles, il faudra rajouter un USING

  • DROP USER ‘nom_user'@'nom_hote' permet de supprimer un utilisateur

  • REVOKE privilege [, privilege,...] ON niveau_privilege FROM user permet de retirer un privilège à un utilisateur

  • Pour les triggers, procédures stockées et des vues, le privilège de l'utilisateur créant ceux-ci est vérifié.

  • L'utilisateur qui exécute un trigger, une procédure stockée ou une vue doit disposer des privilèges pour réaliser cette action

  • On peut préciser quel est l'utilisateur responsable de la définition de la vue, trigger ou procédure

  • il faut mettre DEFINER = 'nom_user'@'nom_hote' juste après CREATE

  • Il faut le privilège Global Super pour choisir l'utilisateur.

  • Pour que la procédure ou la vue vérifie les droits de l'utilisateur: SQL SECURITY {DEFINER | INVOKER} juste après DEFINER

  • Il est possible d'utiliser des rôles qui vont être assignés à des utilisateurs: CREATE ROLE

  • On attribue les droits au rôle de la même manière que pour les utilisateurs avec la commande GRANT droit TO role ON base_de_donnees

  • Pour attribuer un rôle : GRANT role1, role2 TO utilisateur1, utilisateur2

  • Pour que les privilèges liés à un rôle puissent être utilisés: SET DEFAUT ROLE

  • En mettant NONE, aucun rôle n'est actif. En mettant ALL, tous les rôles sont actifs

  • Pour vérifier les droits d'un utilisateur: SHOW GRANTS + les rôles qui lui ont été attribués

  • Pour voir les droits liés à un rôle: SHOW GRANTS avec USING rolel, role2

Les transactions

  • Permet regrouper plusieurs requêtes en un bloc
  • Les tables InnoDB sont transactionnelles
  • Par défaut, chaque requête est validée automatiquement
  • Pour éviter la validation automatique: SET autocommit = 0
  • Pour valider les requêtes: COMMIT ; Pour annuler: ROLLBACK
  • Nouvelle transaction créée après un commit ou rollback
  • START TRANSACTION permet de démarrer une transaction même avec la validation automatique
  • SAVEPOINT nom_jalon permet de placer un jalon
  • ROLLBACK [WORK] TO [SAVEPOINT] nom_jalon permet d’annuler les requêtes jusqu'à un jalon
  • RELEASE SAVEPOINT nom_jalon retire un jalon
  • Les commandes modifiant la structure de la base de donnée sans annulation possible
  • START TRANSACTION a pour effet de retirer les verrous de l'utilisateur
  • LOCK TABLES a pour effet de valider la transaction
  • Principes ACID:
    • A: Atomicité
    • C: Cohérence
    • I: Isolation
    • D: Durabilité

Les verrous(locks)

  • Un verrou peut être posé soit sur une table entière soit une partie des lignes d'une table.
  • LOCK TABLES nom_table [READ | WRITE] bloque une table
    • READ: la lecture dans la table est toujours possible mais pas l'écriture
      • l'utilisateur ayant posé le verrou ne pourra que lire les éléments dans la table
    • WRITE: la lecture comme la modification dans la table sont impossibles pour les autres utilisateurs
  • IMPORTANT: instruction LOCK commence par libérer tous les verrous en cours de l'utilisateur
  • START TRANSACTION a pour effet de retirer les verrous de l'utilisateur
  • Pour déverrouiller UNLOCK TABLES;
  • Un verrou de lignes peut être posé uniquement sur des tables utilisant InnDB
    • verrous partagés (lecture possible mais pas la modification)
    • des verrous exclusifs (ni lecture ni modification)
  • Les requêtes de modification et de suppression placent des verrous exclusifs sur les lignes concernées
  • Pour insérer un verrou partagé : LOCK IN SHARE MODE à la fin SELECT
  • Pour insérer un verrou exclusif FOR UPDATE à la fin du SELECT.
  • Ces verrous de ligne sont libérés dès la fin de la requête qui a posé le verrou.
  • Le niveau d'isolation peut être modifié: TRANSACTION ISOLATION LEVEL

Les requêtes préparées

  • La fonction est de stocker une requête qui revient très souvent

  • La requête préparée n'existe que dans sa session

  • Syntaxe: PREPARE nom_requete FROM‘requete'

    • Paramètres représentés par ? peuvent remplacer que des valeurs
  • EXÉCUTER nom_requete [USING @parametrel, @parametre2,...

  • DEALLOCATE PREPARE nom_requete supprimer une requête préparée

  • Préparée par autre langage de programmation (PHP)

  • Utilitaire: injection SQL

  • L'étape numéro un est d'établir une connection entre l'application PHP et MySQL

  • Il est préférable d'utiliser une requête préparée au lieu de fournir directement la requête

  • EX: $bdd->prepare("SELECT nomempl, prenomemp FROM employe LIMIT :nb")

  • Avant d'exéctuer il faut impérativement lier les arguments à leur valeur

  • $requete->bindValue(':nb', 5, PDO::PARAM_INT)

  • Pour exéctuer: $requete->execute()

  • fetch() récupere enregistrement

  • $empl = $requete->fetch()

  • La construction des procédures stockées contient série d'instructions SQL

  • Syntaxe général: CREATE PROCEDURE nom_procedure ([arg1 [,arg2,...]]) instructions

  • Il faut changer dans la session dans laquelle la procédure stockée est créée le délimiteur pour pouvoir ajouter la procédure.

  • Il faut donc définir un nouveau délimiteur de la manière suivante : DELIMITER delimiteur.

  • Les arguments d'une procédure peuvent être de 3 sortes: IN , OUT et InOut

Les variables locales

  • Les variables locales peuvent s définir en utilisant: DECLARE nomVariable typeVariable [DEFAULT valeur]
  • Syntaxe(MySQL) des conditions: IF condition THEN instructions [ELSEIF condition2 THEN instructions .] [ELSE instructions] END IF
  • Syntaxe(MySQL) des boucles(WHILE, ITERATE, REPEAT, LOOP)
  • Les gestionaires d'erreur doivent se placer après les variables locales mais avant les instruction

Les Triggers

  • Serve à exéctuer bloc d'instruction lors modification une table
  • Exécuté par événement soit ajout, modif ou supp
  • Lier au Trigger seulement consultation ou modif
  • Création: CREATE TRIGGER nom moment evenement ON table FOREACH ROW instructions
  • Les triggers identiques seront exécutés en fonction de l'ordre ils ont créé
  • Possibilité de décider de ordre d'execution avec PRECEDES/FOLLOWS

Les vues

  • Permet récupérer enregistrement d'un requête + permet exploit data
  • En tant que les tables stocké de manière durable CREATE VIEW nom_vue AS requete
  • Les Vues apparaîssent dans tables il mettre un commentaire pour distinguer de tables
  • Peu contenir un référence de Variable Loc, util, system à part sa(where, groupby,...) TOUT passe
  • La Vue va renvoyé pareil avant modif même table modifé!!!
  • Il ne pris en compte que si Requête utilisation imp un Trie et il DECONSEILLÉ de clause LIMIT

7 Les TABLES TEMPORAIRES

  • Temporaire n'exist que la la session elle est crée et DISPARAINT

  • Syntaxe pour crée est PAREIL!!! la diffé c'est mot TEMPORAY ajout

  • Il ne sont pas vu par TABLES et ni MODIFICATION est pareil TABLE

  • MOD struct ne valid transac , pas annulé par ROLLBACK

  • Gaine performance et struct ne sont pas possible (CLE étrang,)

  • Cré VUE Mater CONTIENT: requête du sélection!! créer une Nouv table et utilisé TRUNCATE

  • Option permet éviter la remise en cache de requête "NO_CACHE" comparer temp l'exect est approx similaire mais Materlisé est meilleur + choisir requête qui se prête aux matérielle (QU requête avec TEMP et data PAU freq M à Jour

  • Cré une table BASE sur STR et des données d'UN AUTRE, pour créer une struct créer TABLE copie LIKE table à Copier

  • Création table remplies avec les données d'une autre: CREATE [TEMPORARY] TABLE autre_copie SELECT coll, coll FROM table_acopier [WHERE ...]

  • Création table structure et données d'après les champs d'une ou d'une autre table: CREATE [TEMPORARY] TABLE autre_copie(col1, col..., PRIMARY KEY..., INDEX) SELECT...

  • CREATE Or Replace VIEW: remplace la vue si existante.

  • Alter VIEW nom_vue: modifie la vue si existante.

  • DROP VIEW nom _ vue: supprimer la vue.

  • Création Table temporaire: Create TEMPORARY table tab_temporaire

  • TRUNCATE: vide la table il ne re-calcul pas le ON DELETE

  • Les tables Temporaires gagne(accelere) performance et struct ne sont PAS possible (clé étrang, etc)

  • Vues(VIRE si existant à crée) Create OR Replace VIEW= Remplace la vue si elle exist

That's a great set of detailed study notes on SQL! They're well-organized, comprehensive, and factually accurate. The use of subheadings and bullet points makes the information easily digestible. The inclusion of syntax examples and explanations of key concepts is excellent. Well done!

Studying That Suits You

Use AI to generate personalized quizzes and flashcards to suit your learning preferences.

Quiz Team

Related Documents

Le langage SQL Partie 2 PDF

Description

Ce questionnaire explore les bases de SQL, y compris l'extraction d'informations, les opérations sur les tables et l'intégrité référentielle. Testez vos connaissances sur les commandes DELETE, TRUNCATE, et la gestion des procédures stockées. Évaluez votre compréhension de la manipulation de données en SQL.

More Like This

Ethical Mindset Quiz
0 questions

Ethical Mindset Quiz

EthicalHeliotrope7625 avatar
EthicalHeliotrope7625
Commandes de SQL - Cours
42 questions

Commandes de SQL - Cours

SatisfactoryTungsten avatar
SatisfactoryTungsten
Use Quizgecko on...
Browser
Browser