SQL – DML – Insert, Update, Delete, Truncate et les
Transcription
SQL – DML – Insert, Update, Delete, Truncate et les
SQL – DML – Insert, Update, Delete, Truncate et les transactions Insérer des lignes, modifier des valeurs de colonnes et supprimer des lignes Les ordres de création de lignes, de mise à jour des valeurs de colonnes et de suppression de lignes interviennent au niveau du CONTENU des tables. Ces ordres mettent en œuvre • l’APPLICATION DES CONTRAINTES D’INTEGRITE spécifiés lors de la création des tables • les mécanismes de GESTION DE TRANSACTION afin de garantir l’intégrité des données lors d’accès concurrent aux données. 1-Insérer des lignes dans une table, ordre INSERT INTO L’ordre INSERT permet l’ajout de lignes dans une table. A- Insérer une ligne complète à partir de valeurs fixes Dans ce cas de requête d’insertion, les listes des valeurs sont fournies par des valeurs constantes ou des expressions contenant des fonctions. Ces listes de valeurs doivent correspondre à toutes les colonnes de la table, sinon une liste des noms de colonnes correspondantes doit être précisée. Syntaxe générale : INSERT INTO nom_table [(col1, col2, col3, ...)] VALUES (valeur1, valeur2, valeur3, …) ; Par exemple : ajouter un membre INSERT INTO member VALUES (1,'dupont','pierrE','bld Gambetta' , 'cachan' , '20/10/1975',NULL); B- Insérer plusieurs lignes à partir d’une requête Dans ce cas de requête d’insertion, les listes des valeurs sont fournies par une requête SELECT complète. Ces listes de valeurs doivent correspondre à toutes les colonnes de la table, sinon une liste des noms de colonnes correspondantes doit être précisée. Syntaxe générale : INSERT INTO nom_table [(col1, col2, col3, ...)] SELECT nomCol1, nomCol2, nomCol3,... FROM nom_table1 [WHERE conditions] [GROUP BY colonnes] [HAVING conditions] [ORDER BY colonnes] ; PATDEZ-2006- Insérer des lignes, modifier des valeurs de colonnes et supprimer des lignes Page 1/6 SQL – DML – Insert, Update, Delete, Truncate et les transactions 2-Mettre à jour des valeurs de colonnes, ordre UPDATE L’ordre UPDATE permet la mise à jour de valeurs de colonnes dans UNE SEULE TABLE selon la valeur d’une condition exprimée dans la clause WHERE. ATTENTION : UN ORDRE DE MISE A JOUR SANS CLAUSE ‘WHERE’ AFFECTE TOUTE LES LIGNES DE LA TABLE. Syntaxe générale : UPDATE nom_table SET col1 = valeur1 [,col2 = valeur2, col3 = valeur3,...] [WHERE expression_condition] ; La condition spécifiée peut être exprimée : • Par rapport aux colonnes de la table mise à jour • Par rapport à une requête imbriquée indépendante ou corrélée Mettre à jour (corriger) le prénom d’un membre : UPDATE membre SET prenom = ‘john’ WHERE id_memb = 10 ; Augmenter le tarif des activités (de TOUTES les activités) de 10% : UPDATE activite SET tarif = tarif * 1.1; Augmenter de 10% le prix des oeuvres des artistes nés avant 1900 : UPDATE t_oeuvre SET prix = prix * 1.1 WHERE numartiste IN ( SELECT numartiste FROM t_artiste WHERE anneeNaissance < 1900 ) ; 3-Supprimer des lignes d’une table, ordre DELETE L’ordre DELETE permet la suppression d’une ou plusieurs lignes d’une table selon la valeur d’une condition. PATDEZ-2006- Insérer des lignes, modifier des valeurs de colonnes et supprimer des lignes Page 2/6 SQL – DML – Insert, Update, Delete, Truncate et les transactions ATTENTION : UN ORDRE DE SUPPRESSION SANS CLAUSE ‘WHERE’ SUPPRIME TOUTE LES LIGNES DE LA TABLE. DELETE [FROM] nom_table [WHERE expression_condition] ; La condition spécifiée peut être exprimée : • Par rapport aux colonnes de la table cible de la suppression de lignes • Par rapport à une requête imbriquée indépendante ou corrélée Supprimer les inscriptions du membre de numéro 10 : DELETE inscrire WHERE id_memb = 10 ; 4-Vider une table de son contenu, ordre TRUNCATE TABLE L’ordre TRUNCATE TABLE permet la suppression de TOUTES LES LIGNES D’UNE TABLE sans conservation de la trace de la suppression (SANS JOURNALISATION). ATTENTION : LES SUPPRESSIONS DE LIGNES NE SONT PAS JOURNALISEES (un ordre ROLLBACK ne permet pas d’annuler cette suppression de lignes) TRUNCATE TABLE nom_table ; 5-Validation ou abandon des mises à jour effectuées Les mises à jour demandées au SGBD ne sont effectivement vraiment enregistrées dans le base de données que lorsque demande leur validation explicitement. A- Valider les mises à jour effectuées Permet de confirmer la mise à jour des données dans la base de données (depuis le dernier ordre COMMIT) Syntaxe générale : COMMIT [TRANSACTION]; B- Annuler les mises à jour effectuées Permet d’annuler la mise à jour des données dans la base de données (depuis le dernier ordre COMMIT). Syntaxe générale : ROLLBACK [TRANSACTION]; PATDEZ-2006- Insérer des lignes, modifier des valeurs de colonnes et supprimer des lignes Page 3/6 SQL – DML – Insert, Update, Delete, Truncate et les transactions 6-Gestion des transaction Les requêtes SQL DML permettent la réalisation de tâches de mises à jour complexes sur les données des tables. Dans certains cas, ces mises à jour vont requérir l’exécution de plusieurs requêtes successives afin de prendre en compte les mises à jour multi tables. De plus, dans des environnement transactionnels, des mises à jour simultanées peuvent être requises par différents utilisateurs ou différents applications. Des effets d’entrelacement dans l’exécution de ces lots de requêtes peuvent apparaître. A- Les mécanismes d’isolation des transactions : les verrous Les lectures et écritures d’une transaction doivent être garanties par le SGBD : soit elles se déroulent toutes correctement soit elles sont toutes abandonnées. Voici quelques cas d’anomalies possibles qui est indispensable de gérer. T1 et T2 représentent 2 transactions se déroulant simultanément. R représente une opération de lecture, W une opération de mise à jour. Cas A- Lecture des données non validées (« dirty read ») Une transaction (T2) va lire des données écrites par une autre transaction (T1) concurrente non encore validée T1 T2 R(A), W(A) R(A), W(A), commit R(B), W(B), abort Cas B- Lecture des données non répétable(« non repeatable read ») Une transaction (T1) est amenée à relire des données lues précédemment, ces données ayant été modifiées depuis la lecture initiale par une transaction (T2) T1 T2 R(A) R(A), W(A), commit R(A), W(A), commit Cas C- Lecture fantômes (« phantom ») Une transaction (T1) est amenée à relire un ensemble de lignes lues précédemment, des lignes ayant été ajoutées par une transaction (T2) T1 T2 R(A) R(A), W(A), commit R(A), W(A), commit SET TRANSACTION ISOLATION LEVEL niveau_isolation PATDEZ-2006- Insérer des lignes, modifier des valeurs de colonnes et supprimer des lignes Page 4/6 SQL – DML – Insert, Update, Delete, Truncate et les transactions Les degrés d’isolation des transactions : Niveau d’isolation READ UNCOMMITED Permet de lire une ligne même si elle a été mises à jour par une transaction non validée READ COMMITED Empêche la lecture d’une donnée mise à jour par une autre transaction REPEATABLE READ Empêche la mise à jour de données lues SERIALIZABLE Empêche toute mise à jour ou insertion si une transaction est en cours niveau 0 A possible B possible C possible 1 impossible possible possible 2 impossible impossible possible 3 impossible impossible impossible La pose de verrous sur les lignes lues (ou les pages physiques) va permettre aux autres transaction ayant besoin de ces pages de savoir qu’elles doivent attendre pour garantir les données lues. B- Le Deadlock, contrepartie de la pose des verrous La gestion des transactions met en place des verrous (lock) de lectures de lignes (ou au niveau physique bloc ou pages de la base) pour empêcher la lecture de lignes en train d’être mises à jour. Ces verrous sont libérés sur le commit ou le rollback Ces mécanismes de verrous peuvent néanmoins conduire à une situation de blocage, selon la terminologie : Deadlock - verrou mortel - étreinte fatale - interblocage T1 T2 R(A) Verrou(A) R(B) Verrou(B) R(B) Attente libération Verrou(B) R(A) Attente libération Verrou(A) Cette situation de blocage est gérée par les SGBD. A la détection de ces blocages, évènement est déclenché, celui-ci annulant l’une des 2 transactions en cours. PATDEZ-2006- Insérer des lignes, modifier des valeurs de colonnes et supprimer des lignes Page 5/6 SQL – DML – Insert, Update, Delete, Truncate et les transactions 7-Mécanismes de ‘journalisation’ A- Les journaux pour garantir la reprise après incident La journalisation regroupe les mécanismes utilisés par les SGBD pour garantir les données qu’ils gèrent. Un journal central va contenir toutes les mises à jour . Des journaux de transaction (Quick Before Look, par exemple) vont contenir les images des lignes en cours de mise à jour (image avant et images après). En cas d’incident (coupure de courant, défaillance disque, etc.), le SGBDR est capable de vérifier ses journaux, de détecter les transactions qui n’étaient pas validées et annuler leurs mises à jour afin de conserver l’intégrité des données de la base. B- Placement des fichiers journaux et des fichiers de bases de données Le placement des fichiers relatifs aux journaux et aux fichiers de bases de données font l’objet d’une attention particulière. Une répartition physique sur des disques différents permet • D’une part de garantir des performances optimales • De répartir les risques en cas de perte de disque (les fichiers journaux sont souvent dupliquées sur plusieurs axes ou disques) PATDEZ-2006- Insérer des lignes, modifier des valeurs de colonnes et supprimer des lignes Page 6/6