SGBDR Sql server 1 Pr H.LAARAJ 2 1 introduction : SQL server SQL-Server est un SGBDR Client-Serveur qui utilise TRANSACT-SQL dans ses transactions. Client Requête (Transact-SQL) Serveur Résultats (seulement les donnes) Base de Données Application CLIENTE Application SERVEUR : SQL-SERVER (SGBDR) 1
3 Objets de SQL Server Les bases de données contiennent un certain nombre d objets logiqu es. Il est possible de regrouper ces objets en trois grandes catégories : Gestion et stockage des données : tables, type de données, contrai ntes d intégrité, valeur par défaut, règles et index. Accès aux données : vues et procédures stockées. Gestion de l intégrité complexe : déclencheur (Trigger) 4 2 Création une base de données La création d une base de données est une étape ponctuelle, réalisée par un administrateur SQL Server. Avant de tenter de créer une base de données, il e st important de définir un certain nombre d éléments de façon précise : le nom de la base de données qui doit être unique sur le serveur SQL, la taille de la base de données, les fichiers utilisés pour le stockage des données. Une base peut être créée de deux façons différentes : par l intermédiaire de l instruction Transact SQL CREATE DATABASE ; par l intermédiaire de SQL Server Management Studio. 2
5 3 les tables, view 3.1 création des tables: create table nom_table( champ type,.) Exemple : créer les 2 tables? Employer( code, nom, prenom, date_naiss, salaire,codef) Fonction (codef, nomf) 6 3.2 les contraintes d intégrités Contraintes de clé primaire : ALTER TABLE nom_table ADD CONSTRAINT nom_contrainte PRIMARY KEY(nom_champ); Exemple : Le champ code de la table Employer 3
7 Contraintes de clés étrangeres : ALTER TABLE nom_table ADD CONSTRAINT nom_contrainte FOREIGN KEY(nom_champ) REFERENCES nom_table(champ); Exemple : Le champ codef de la table Fonction 8 Contraintes de validation Les contraintes de validations (CHECK) vont permettre de définir un certain nombre de règles simples de gestion des données. ALTER TABLE nom_table ADD CONSTRAINT nom_contrainte CHECK (règles); Exemple : Définir la règle suivante : La salaire de l employer doit être compris entre 3000 et 20000 4
9 Les index Les index vont permettre d accéder plus rapidement aux différentes informations. CREATE INDEX nom_index Exemple : ON nom_table(nom_champ); Définir un index pour le champ codef de la table Fonction 10 Exercice pratique : Dans MS sql server : Créer la base de données bd1 Créer 2 tables employer et fonction avec toutes les contraintes possibles Insérer les enregistrements dans ses 2 tables 5
11 Types de données définis par l utilisateur Il est possible de définir ses propres types de données, soit par l intermédiaire d e Management Studio, soit par la commande CREATE TYPE. CREATE TYPE nom_type from type_base { null / not null} Exemple : Définir un "type de données utilisateur" nommé texte de type nvarchar(20) non null et attribuer ce type aux champs nomf de la table fonction? 12 La valeur par défaut La valeur par défaut permet de préciser la valeur qui va être positionnée dans la colonne si aucune information n est précisée lors de l insertion de la ligne. CREATE DEFAULT nom_val_defaut as valeur Rq: la procédure sp_bindefault (nom_val_defaut, table.champ )permet d attribuer la valeur par défaut à un champ donné en argument Exemple : Créer la valeur par défaut suivante: valdefautnom (Valeur = anonyme ) et attribuer cette valeur par défaut au champ nom dans la table Employer. 6
13 séquence Une séquence est un objet lié au schéma défini par l'utilisateur qui génère une séquence de valeurs numériques d'après la spécification avec laquelle la séquence a été créée CREATE SEQUENCE schema_name. sequence_name AS integer_type START WITH <constant> INCREMENT BY <constant> MINVALUE <constant> NO MINVALUE MAXVALUE <constant> NO MAXVALUE CYCLE NO CYCLE CACHE <constant> NO CACHE ; 14 Contrairement aux valeurs de colonnes d'identité générées lors de l'insertion de lignes, une application peut obtenir le numéro séquentiel suivant sans insérer la ligne en appelant l instruction: NEXT VALUE FOR schema_name. sequence_name 7
15 3.3 view Une vue est une table virtuelle, dans laquelle il est possible de rassembler des informations provenant de plusieurs tables les données ne sont pas stockées dans une table de la base de données CREATE VIEW Nom_de_la_Vue (colonnes) AS SELECT... 16 4 langage transact sql 4.1 La déclaration d une variable Declare @Nom_Variable Type_Donnée Exemple : Declare @a int Declare @b nvarchar(10) 8
17 4.2 l affectation d une valeur à une variable Select @Nom_Variable = valeur Select @Nom_Variable = (Select...from...Where ) ou Set @Nom_Variable =valeur Set @Nom_Variable = (Select...from...Where ) 18 4.3 l affichage d informations Print Elément_A_Afficher Ou select Elément_A_Afficher Remarque : qu'on ne peut jamais concaténer une valeur numérique avec une valeur chaîne de caractères, Exemple : Declare @x int Set @x = 2 Print la valeur de x : + convert(nvarchar(20),@x) 9
19 4.4 les structures alternatives If Condition Begin Instructions End Else Begin Instructions End 20 4.4 les boucles While Condition Begin instructions End Remarques : Le mot clé Break est utilisé dans une boucle While pour forcer l'arrêt de la boucle Le mot clé Continue est utilisé dans une boucle While pour annuler l'itération en cours et passer aux itérations suivantes (renvoyer le programme à la ligne du while) 10
21 4.5 Exercice: Soit la base de donneés suivante: table etudiant (NumEtd INT, nom nvarchar(23),prenom nvarchar(23),adresse nvarchar(123),ville nvarchar(23)) table matiere (NumMat INT, libelle nvarchar(23)) table notation (NumEtd INT,NumMat INT,note decimal(2,2),dateevaluer datetime) 1 Ecrire un programme qui calcule la moyenne de note de l étudiant numéro 2 et affiche un message moyenne valide ' ou moyenne invalide ' selon que la moyenne est inférieur ou supérieur à 10 2 Ecrire un programme qui : Calcule le nombre d étudiants dans la table Enregistre un nouveau étudiant avec les valeurs ( nbreetudiants+1, salmi, mourad,null, laayoune ) 22 5 Procédures stockées 5.1 Procédure sans arguments Create Procedure Nom_Procédure as Instructions Exécution : Exec Nom_Procedure Exemple: Créer une procédure stockée nommée PS1 qui affiche la liste des étudiants: 11
23 5.2 Avec des paramètres en entrée : Create Procedure Nom_Procedure Nom_Param1_Entrée Type_Donnée = Valeur_Par_Defaut, Nom_Param2_Entrée Type_Donnée = Valeur_Par_Defaut as Instructions Exécution : Exec Nom_Procedure Valeur_Param1, Valeur_Param2... Ou Exec Nom_Procedure Nom_Param1 = Valeur_Param1, Nom_Param2 = Valeur_Param2... 24 Exemples: 1. Créer une procédure stockée nommée PS2 qui affiche la liste des notes d'un étudiant dont le numéro est donné en paramètre : 2. Créer une procédure stockée nommée PS3 qui reçoit un numéro de l étudiant, un numéro de matière et la note : Si l étudiant n'existe pas ou si la matière n'est pas disponible, afficher un message d'erreur Ajouter ensuite seulement les valeurs d entrée à la table notation, la dateevaluer prend la valeur vide 12
25 5.3 Avec des paramètres en sortie Create Procedure Nom_Propriétaire.Nom_Procedure Nom_Param1_Entrée Type_Donnée = Valeur_Par_Defaut, Nom_Param2_Sortie Type_Donnée Output... as instructions Exécution : Declare Var_Param1_Sortie Type_Param1_Sortie... Exec Nom_Procedure Val_Param1_Entrée,..., Var_Param2_Sortie Output... Exemple: Créer une procédure stockée nommée PS4 qui retourne en sortie la moyenne de notes d un étudiant dont le numéro est passé en paramètre d entrée : 26 5.4 Fonction qui retourne une valeur scalaire Create Function Nom_fonction (Nom_Param1 Type_Donnée, ) Returns type_de_retour as Instructions... Return Valeur Exemple : Créer une fonction nommée F1(numero int) qui retourne la moyenne des notes d un étudiant dont le numéro est passé en argument? 13
27 5.5 Fonction qui retourne une table Create Function Nom_Fonction (Nom_Param1 Type_Donnée, ) Returns Table as Return (Select ) Exemple : Créer une fonction nommée F2() qui retourne la liste des étudiants (nom, prenom): 28 6 Curseurs 6.1 définition : L utilisation de curseurs est une technique permettant de traiter ligne par ligne le résultat d une requête, contrairement au SQL (SELECT) qui traite un ensemble de lignes. 14
29 6.2 Declarer CURSOR Cette instruction permet la déclaration et la description du curseur ANSI. DECLARE nomcurseur[insensitive][scroll]cursor FOR SELECT... FOR {READ ONLY UPDATE[OF liste_colonne]}] INSENSITIVE Seules les opérations sur la ligne suivante sont permises. SCROLL Les déplacements dans les lignes du curseur peuvent être effectués dans tous les sens. UPDATE Précise que des mises à jour vont être réalisées sur la table d origine du curseur. 30 6.3 manipuler les curseurs Pour ouvrir un curseur Open nom_curseur Pour lire un enregistrement à partir d'un curseur Fetch {First next prior last} from nom_curseur into variable1, variable2,.. Fermer un curseur Close nom_curseur Libérer les ressources utilisées par un curseur : Deallocate Nom_Curseur La variable système @@fetch_status est utilisée pour détecter la fin du curseur. Tant que cette variable = 0, on a pas encore atteint la fin du curseur. 15
31 6.4 Exemple: Créer un curseur qui : 1. Affiche la liste des étudiants sous la forme : nom : prénom : 2. Affiche le première enregistrement de la table étudiant sous la forme : nom : prénom : 3. effectue la suppression itérative d un étudiant s il constate qu il n a pas une note ( note is null) : 32 7. transaction Une transaction est un ensemble indivisible d instructions Transact SQL. Soit la totalité peut s exécuter, soit aucune instruction ne peut s exécuter. 16
33 Pour démarrer une transaction on utilise l'instruction Begin Tran Pour valider la transaction et rendre les traitements qui lui sont associés effectifs, on utilise l'instruction Commit Tran Pour interrompre une transaction en cours qui n'a pas encore été validée, on utilise l'instruction Rollback Tran Begin Tran [Nom_Transaction] If Condition RollBack Tran [Nom_Transaction] Commit Tran [Nom_Transaction] 34 Update Commit Rollback 17
35 8 Les exceptions Pour chaque erreur qui survient dans SQL Server, SQL Server produit un message d erreur. En règle générale, tous les messages possèdent la même structure : Texte Message : Représente le texte du message. Gravité : niveau compris entre 1 et 25 afin de mesurer l'importance de l'erreur. Seul l'administrateur système peut ajouter des messages avec un niveau de gravité compris entre 19 et 25 Etat : Valeur entière comprise entre 1 et 127 qui identifie la source à partir de laquelle l'erreur a été émise. Il est possible de lever des exceptions personnalisées via l instruction RAISERROR : Exemple : RAISERROR ('Le stock est négatif!', 12, 1) Gravité Etat 36 gestion des erreurs Il existe deux manières de gérer les erreurs. La première consiste à tester la valeur de la variable système @@ERROR la seconde consiste à positionner dans un gestionnaire d exception TRY le bloc d instructions à tester, et dans le CATCH, l erreur à lever. Voyons la syntaxe : BEGIN TRY... END TRY BEGIN CATCH... END CATCH 18
37 les fonctions SQL utilisées Pour obtenir des informations sur l erreur, il est possible d utiliser les fonctions SQL suivantes : ERROR_MESSAGE() : Retourne le texte du message à communiquer à l application. Ce texte comprend tous les paramètres mis en argument à l erreur en question. ERROR_NUMBER() : Retourne le numéro de l erreur. ERROR_SEVERITY() : Retourne le niveau de gravité. ERROR_STATE() : Retourne l état. ERROR_LINE() : Retourne le numéro de la ligne à partir de laquelle l'erreur a été émise. 38 Exemple: Ecrire un code T-Sql qui génère une erreur lors que l utilisateur: Insère dans la table matière un enregistrement dont la clé est déjà existe Insère dans la table notation une note > 20 ou < 0 19
39 9. Triggers(déclencheurs) Se déclenche directement après une instruction (insert delete update) CREATE TRIGGER <name> ON <table> {FOR AFTER INSTEAD OF} <list of events> AS. --les instructions T-SQL Avec: FOR ou AFTER: déclenche le trigger après l instruction. INSTEAD OF : n exécute pas l instruction mais fait un traitement à la place. <list of events> = INSERT, DELETE, UPDATE 40 les tables INSERTED et DELETED Dans les instructions Trigger on a 2 tables INSERTED et DELETED Dans le cas d un DELETE : DELETED contient les lignes supprimées Dans le cas d un INSERT : INSERTED contient les nouvelles lignes Dans le cas d un UPDATE : DELETED contient les lignes avant modification, INSERTED contient les lignes après modification INSERTED Rollback Insert delete update Trigger BD DELETED 20
41 11 schéma Les schémas SQL sont des unités de code à la manière de bibliothèque package ou des espaces de noms create schema mon_schema 42 12.Gestion des droits d accès en SQL Server Comme tous les autres SGBD, SQL Server exige que les utilisateurs des bases de données soient préalablement connectés au Serveur SQL. Les droits d accès que l on pourra définir sur les différents objets de la BD seront associés à un utilisateur de BD, auquel correspondra une connexion au serveur (appelée également login). SQL Server prévoit 2 modes de sécurité différents permettant de créer des connexions au serveur. Mode de sécurité Windows: L accès au serveur SQL est transparent pour les utilisateurs approuvés par Windows. Mode de sécurité Mixte: Ce mode repose sur une authentification Windows suivie d une authentification SQL Server. 21
43 Syntaxe de création d une connexion (login) en mode sécurité Windows : CREATE LOGIN nom_connexion FROM WINDOWS [WITH DEFAULT_DATABASE=mabd ] nom_connexion doit être un nom d utilisateur ou de groupe Windows en mode sécurité Mixte : CREATE LOGIN nom_connexion WITH PASSWORD = mon_mot_de_passe [,DEFAULT_DATABASE=mabd ] 44 Gestion des utilisateurs de la BD Les connexions au niveau serveur seront donc associées («mappées») à des utilisateurs de BD. CREATE USER nomutilisateur [FOR LOGIN maconnexion] [WITH DEFAULT_SCHEMA= nomschéma] nomschéma est le nom du schéma associé à cet utilisateur de BD. Un schéma est un ensemble logique d objets (tables, vues, procédures, fonctions) à l intérieur d une BD 22
45 Gestion des droits Il est possible de gérer l attribution de privilèges au niveau du serveur, de la BD entière, au niveau d un schéma particulier ou au niveau d un objet particulier. Droits d utilisation de DDL: Ces droits permettront à des utilisateurs de créer leurs propres BD, tables, vues, procédures, fonctions (CREATE) Accorder : GRANT {ALL permission[,... ]} TO utilisateur Permission : nom de la (ou des) permission(s) de DDL explicitement accordée(s) ou toutes (ALL) Retirer : REVOKE {ALL permission } FROM utilisateur Interdire : DENY permission TO utilisateur 46 Droits d utilisation de DML: Accorder : GRANT {ALL permission[,... ]} ON Objet TO utilisateur Permission : nom de la (ou des) permission(s) de DDL explicitement accordée(s) ou toutes (ALL) Retirer : REVOKE {ALL permission } ON Objet FROM utilisateur Interdire : DENY permission ON Objet TO utilisateur 23
47 Les rôles Ils permettent de gérer plus facilement les privilèges en accordant ceux-ci aux rôles et en accordant ensuite un ou plusieurs rôles aux différents utilisateurs. Syntaxe: CREATE ROLE nomrole Pour ajouter un utilisateur dans un rôle il faut utiliser la procédure stockée système sp_addrolemember Exec sp_addrolemember nom_rôle, nom_utilisateur 24