Podcast
Questions and Answers
Dans le contexte des bases de données, quel est le rôle principal du langage SQL (Structured Query Language) ?
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 ?
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 ?
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 ?
Vous souhaitez modifier la structure d'une table existante, par exemple, ajouter une nouvelle colonne. Quelle commande SQL utiliseriez-vous ?
Comment assurer l'intégrité référentielle entre deux tables dans une base de données relationnelle utilisant SQL?
Comment assurer l'intégrité référentielle entre deux tables dans une base de données relationnelle utilisant SQL?
Quelle commande est utilisée pour modifier le délimiteur par défaut dans SQL avant de créer une procédure stockée?
Quelle commande est utilisée pour modifier le délimiteur par défaut dans SQL avant de créer une procédure stockée?
Quelle est la syntaxe correcte pour appeler une procédure stockée nommée calculer_total
avec un paramètre d'entrée @valeur
?
Quelle est la syntaxe correcte pour appeler une procédure stockée nommée calculer_total
avec un paramètre d'entrée @valeur
?
Quelle commande SQL est utilisée pour supprimer une procédure stockée existante nommée mettre_a_jour_stock
?
Quelle commande SQL est utilisée pour supprimer une procédure stockée existante nommée mettre_a_jour_stock
?
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?
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?
Comment déclarer une variable locale nommée compteur
de type entier dans une procédure stockée?
Comment déclarer une variable locale nommée compteur
de type entier dans une procédure stockée?
Quelle est la fonction d'une condition IF
dans une procédure stockée?
Quelle est la fonction d'une condition IF
dans une procédure stockée?
Quelle est la fonction d'une boucle WHILE
dans une procédure stockée?
Quelle est la fonction d'une boucle WHILE
dans une procédure stockée?
Dans une procédure stockée, comment affecter le résultat d'une requête SELECT COUNT(*)
à une variable de sortie nommée total
?
Dans une procédure stockée, comment affecter le résultat d'une requête SELECT COUNT(*)
à une variable de sortie nommée total
?
Quelle commande est utilisée pour supprimer un trigger dans une base de données ?
Quelle commande est utilisée pour supprimer un trigger dans une base de données ?
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 ?
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 ?
Quelle commande permet d'afficher la liste de tous les triggers définis dans une base de données ?
Quelle commande permet d'afficher la liste de tous les triggers définis dans une base de données ?
Quel est le principal avantage d'utiliser une vue dans une base de données ?
Quel est le principal avantage d'utiliser une vue dans une base de données ?
Où est stockée la définition d'une vue dans une base de données ?
Où est stockée la définition d'une vue dans une base de données ?
Quel avantage les vues offrent-elles en termes de sécurité des données ?
Quel avantage les vues offrent-elles en termes de sécurité des données ?
Quelle est la principale différence entre une vue et une table dans une base de données ?
Quelle est la principale différence entre une vue et une table dans une base de données ?
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' ?
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' ?
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
?
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
?
Dans le contexte des bases de données, quelle est la principale différence entre un verrou partagé et un verrou exclusif?
Dans le contexte des bases de données, quelle est la principale différence entre un verrou partagé et un verrou exclusif?
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 ?
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 ?
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 ?
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 ?
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)?
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)?
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 ?
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 ?
Dans le cadre d'une transaction, quand les verrous de lignes sont-ils libérés?
Dans le cadre d'une transaction, quand les verrous de lignes sont-ils libérés?
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 ?
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 ?
Lorsqu'un verrou de ligne est placé sur une colonne non indexée, quel est l'impact sur la table?
Lorsqu'un verrou de ligne est placé sur une colonne non indexée, quel est l'impact sur la table?
Quelle est la différence entre l'utilisation de SET GLOBAL TRANSACTION ISOLATION LEVEL
et SET SESSION TRANSACTION ISOLATION LEVEL
?
Quelle est la différence entre l'utilisation de SET GLOBAL TRANSACTION ISOLATION LEVEL
et SET SESSION TRANSACTION ISOLATION LEVEL
?
Comment renommer un utilisateur ancien_nom
hébergé sur serveur1
en nouveau_nom
tout en conservant le même hôte?
Comment renommer un utilisateur ancien_nom
hébergé sur serveur1
en nouveau_nom
tout en conservant le même hôte?
Quelle est la différence entre l'utilisation de GRANT ... WITH GRANT OPTION
et GRANT OPTION
lors de l'attribution de privilèges?
Quelle est la différence entre l'utilisation de GRANT ... WITH GRANT OPTION
et GRANT OPTION
lors de l'attribution de privilèges?
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?
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?
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?
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?
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?
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?
Quel est l'effet du niveau d'isolation SERIALIZABLE
sur les requêtes SELECT
non verrouillées?
Quel est l'effet du niveau d'isolation SERIALIZABLE
sur les requêtes SELECT
non verrouillées?
Dans quel contexte les tables temporaires sont-elles particulièrement utiles?
Dans quel contexte les tables temporaires sont-elles particulièrement utiles?
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?
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?
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?
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?
Comment peut-on mettre à jour une vue matérialisée afin de refléter les changements dans les tables sous-jacentes?
Comment peut-on mettre à jour une vue matérialisée afin de refléter les changements dans les tables sous-jacentes?
Quelle est la conséquence de l'utilisation de l'option SQL_NO_CACHE
dans une requête SELECT
?
Quelle est la conséquence de l'utilisation de l'option SQL_NO_CACHE
dans une requête SELECT
?
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?
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?
Pourquoi l'utilisation de triggers pour la mise à jour automatique des vues matérialisées pourrait-elle ne pas être optimale dans certains cas?
Pourquoi l'utilisation de triggers pour la mise à jour automatique des vues matérialisées pourrait-elle ne pas être optimale dans certains cas?
Dans quelle situation serait-il particulièrement avantageux de créer une vue matérialisée dans une base de données?
Dans quelle situation serait-il particulièrement avantageux de créer une vue matérialisée dans une base de données?
Flashcards
Qu'est-ce que SQL?
Qu'est-ce que SQL?
SQL est un langage standard pour la gestion de bases de données relationnelles.
UE 219, c'est quoi?
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, c'est où?
HELHa (Haute École Louvain en Hainaut) est l'institution où ce cours est enseigné.
Campus de Mons?
Campus de Mons?
Signup and view all the flashcards
IRAM?
IRAM?
Signup and view all the flashcards
GRANT OPTION
GRANT OPTION
Signup and view all the flashcards
DROP USER
DROP USER
Signup and view all the flashcards
RENAME USER
RENAME USER
Signup and view all the flashcards
SHOW GRANTS
SHOW GRANTS
Signup and view all the flashcards
Afficher les utilisateurs et les droits
Afficher les utilisateurs et les droits
Signup and view all the flashcards
Droits d'exécution
Droits d'exécution
Signup and view all the flashcards
DEFINER
DEFINER
Signup and view all the flashcards
Utilisateur par défaut
Utilisateur par défaut
Signup and view all the flashcards
Verrou Partagé
Verrou Partagé
Signup and view all the flashcards
Verrou Exclusif
Verrou Exclusif
Signup and view all the flashcards
Comment insérer un verrou partagé ?
Comment insérer un verrou partagé ?
Signup and view all the flashcards
Comment insérer un verrou exclusif ?
Comment insérer un verrou exclusif ?
Signup and view all the flashcards
Quand les verrous de ligne sont-ils libérés ?
Quand les verrous de ligne sont-ils libérés ?
Signup and view all the flashcards
Impact d'un verrou sur une colonne non indexée
Impact d'un verrou sur une colonne non indexée
Signup and view all the flashcards
Niveaux d'isolation des transactions
Niveaux d'isolation des transactions
Signup and view all the flashcards
Comportement de SERIALIZABLE
Comportement de SERIALIZABLE
Signup and view all the flashcards
Changer de délimiteur
Changer de délimiteur
Signup and view all the flashcards
Créer une procédure stockée
Créer une procédure stockée
Signup and view all the flashcards
Appeler une procédure stockée
Appeler une procédure stockée
Signup and view all the flashcards
Supprimer une procédure stockée
Supprimer une procédure stockée
Signup and view all the flashcards
Procédure avec paramètre et résultat
Procédure avec paramètre et résultat
Signup and view all the flashcards
Procédure avec variable locale et condition
Procédure avec variable locale et condition
Signup and view all the flashcards
Procédure avec boucle et variables
Procédure avec boucle et variables
Signup and view all the flashcards
Paramètres IN et OUT
Paramètres IN et OUT
Signup and view all the flashcards
Tables temporaires
Tables temporaires
Signup and view all the flashcards
Vue matérialisée
Vue matérialisée
Signup and view all the flashcards
TRUNCATE
TRUNCATE
Signup and view all the flashcards
ROLLBACK et TRUNCATE
ROLLBACK et TRUNCATE
Signup and view all the flashcards
Mise à jour d'une vue matérialisée
Mise à jour d'une vue matérialisée
Signup and view all the flashcards
SQL_NO_CACHE
SQL_NO_CACHE
Signup and view all the flashcards
Quand utiliser les vues matérialisées?
Quand utiliser les vues matérialisées?
Signup and view all the flashcards
Triggers et vues matérialisées
Triggers et vues matérialisées
Signup and view all the flashcards
Qu'est-ce qu'un trigger (déclencheur)?
Qu'est-ce qu'un trigger (déclencheur)?
Signup and view all the flashcards
A quoi sert DELIMITER?
A quoi sert DELIMITER?
Signup and view all the flashcards
Que fait DROP TRIGGER?
Que fait DROP TRIGGER?
Signup and view all the flashcards
A quoi sert PRECEDES dans un trigger?
A quoi sert PRECEDES dans un trigger?
Signup and view all the flashcards
Que fait SHOW TRIGGERS?
Que fait SHOW TRIGGERS?
Signup and view all the flashcards
Qu'est-ce qu'une vue (view)?
Qu'est-ce qu'une vue (view)?
Signup and view all the flashcards
Quel est l'intérêt d'utiliser les vues?
Quel est l'intérêt d'utiliser les vues?
Signup and view all the flashcards
Comment les vues améliorent-elles la sécurité?
Comment les vues améliorent-elles la sécurité?
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
- READ: la lecture dans la table est toujours possible mais pas l'écriture
- 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.
Related Documents
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.