Mon Cours 1.1
7 pages
Français
Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres
7 pages
Français
Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres

Description

Chapitre 7 Le Langage de Définition de Données Jusque là, nous avons réalisé toutes les interrogations possibles sur les données, sans pour autant savoir comment gérer leurs structures. Dans ce chapitre, il s’agit de présenter les requêtes de création, de modification et de suppression des tables dans une base de données Oracle. 7.1 Création d’une table – CREATE TABLE C’est la requête CREATE TABLE qui sert à créer une table dans la norme SQL. Une table étant définie par son nom et ses colonnes (une colonne étant définie par son nom et son type de données), la syntaxe générale et simple de ce type de requête est la suivante : CREATE TABLE table (colonne1 type1, colonne2 type2, …, colonnen typen) ; Supposons que nous voulons créer la table personne dont les champs sont : id, nom, prénom et date de naissance. La requête relative est la suivante : CREATE TABLE personne (id NUMBER, nom VARCHAR2(15), prenom VARCHAR2(15), date_naissance DATE) ; A partir de ce moment, il est possible d’insérer des lignes dans la table personne (objet du prochain chapitre). 7.2 Les contraintes Une contrainte concerne une colonne de la table et peut être aperçue comme étant une condition que doivent respecter les valeurs de cette colonne. Elle est spécifiée lors de la création de la table et vient après le type de données de la colonne dans la requête : [CONSTRAINT nom_contrainte] contrainte Toute contrainte est définie par une table, une colonne, un type et un nom. ...

Informations

Publié par
Nombre de lectures 44
Langue Français

Extrait

Chapitre 7Le Langage de Définition de Données Jusque là, nous avons réalisé toutes les interrogations possibles sur les données, sans pour autant savoir comment gérer leurs structures. Dans ce chapitre, il s’agit de présenter les requêtes de création, de modification et de suppression des tables dans une base de données Oracle. 7.1Création d’une table – CREATE TABLE C’est la requête CREATE TABLE qui sert à créer une table dans la norme SQL. Une table étant définie par son nom et ses colonnes (une colonne étant définie par son nom et son type de données), la syntaxe générale et simple de ce type de requête est la suivante : CREATE TABLE table (colonne1 type1, colonne2 type2, …, colonnen typen) ; Supposons que nous voulons créer la tablepersonne dont:les champs sontid,nom,prénom et date de naissance. La requête relative est la suivante : CREATE TABLE personne (id NUMBER, nom VARCHAR2(15), prenom VARCHAR2(15), date_naissance DATE) ; A partir de ce moment, il est possible d’insérer des lignes dans la tablepersonnedu (objet prochain chapitre). 7.2Les contraintes Une contrainte concerne une colonne de la table et peut être aperçue comme étant une condition que doivent respecter les valeurs de cette colonne. Elle est spécifiée lors de la création de la table et vient après le type de données de la colonne dans la requête : [CONSTRAINT nom_contrainte] contrainte Toute contrainte est définie par une table, une colonne, un type et un nom. L’utilisateur peut affecter un nom à une contrainte, sinon Oracle lui affectera un nom par défaut. Les types de contraintes sont les suivants : 1.Clé primaire une clé primaire d’une table est composée d’une ou plusieurs colonnes. Elle PRIMARY KEY est utilisée pour identifier chaque ligne de manière unique. La valeur d’une clé primaire composée de plusieurs colonnes est dite clé primaire composée. Une clé primaire ne doit pas contenir de valeurs NULL. 2.Clé unique  cettecontrainte oblige la colonne de ne pas avoir deux valeurs identiques. Elle a UNIQUE donc le même principe qu’une clé primaire à l’exception qu’elle peut avoir la valeur. Cette NULL contrainte peut être appliquée à une ou à plusieurs colonnes (dans ce cas, chaque uplet doit être unique).
Chapitre 7 : Le Langage de Définition de Données 4 3.Clé étrangère elle représente une relation entre deux tables. Elle FOREIGN KEY … REFERENCES … concerne une ou plusieurs colonnes d’une table dite table fille, et dont les valeurs dépendent des clés primaires ou uniques (et de leurs types données) d’une table dite table mère. On peut ajouter l’option [ON DELETE CASCADE] pour que la suppression d’une ligne de la table mère entraîne la suppression de toutes les lignes de la table fille qui en dépendent. Si cette option n’est pas spécifiée, la suppression des lignes de la table mère est impossible si elles référencent des lignes dans la table fille. On peut aussi ajouter [ON DELETE SET NULL] et dans ce cas, la suppression d’une ligne de la table mère entraîne la mise à NULL des colonnes qui la référencent dans la table fille. 4.Contrainte de vérification parfoisla colonne d’une table doit satisfaire certaines conditions posées par CHECK l’utilisateur. Les contraintes de vérification permettent généralement de restreindre le domaine d’une colonne. 5.NOT NULL  sicette contrainte est appliquée à une colonne, alors cette colonne ne doit pas NOT NULL contenir de valeurs NULL. REQ 68 Créez la table EMP sachant que la table DEPT l’est déjà. Cette table contient une clé primaire EMPNO, un nom qui doit être unique ENAME, un poste JOB, un salaire SAL qui doit dépasser un salaire minimum conventionnel (SMIG) de 600, une date d’embauche HIREDATE qui ne peut pas être NULL, un code d’employeur MGR qui réfère la colonne EMPNO et finalement un numéro de département DEPTNO qui réfère la colonne DEPTNO de la table DEPT ? CREATE TABLE EMP(EMPNO NUMBER CONSTRAINT PK1 PRIMARY KEY, ENAME VARCHAR2(20) CONSTRAINT UN1 UNIQUE, JOB VARCHAR2(15), SAL NUMBER CONSTRAINT CH1 CHECK(SAL>600), HIREDATE DATE DEFAULT ’01JAN80’ NOT NULL, MGR NUMBER CONSTRAINT FK_EMP_EMP REFERENCES EMP(EMPNO), DEPTNO NUMBER REFERENCES DEPT(DEPTNO) ON DELETE CASCADE) ; Rappelons que dans la requête, chaque clause CONSTRAINT sert à donner un nom à la contrainte en cours et qu’elle est facultative (la clause). En cas d’omission de cette clause, Oracle affectera par défaut un nom à cette contrainte. Remarquez aussi le mot clé DEFAULT suivi par une constante et défini sur la colonne HIREDATE. Ce mot clé sert à affecter à une colonne une valeur par défaut si on insère une ligne et qu’on ignore cette colonne. Oracle SQL (et non pas SQL) permet aussi de créer une table et d’y insérer les lignes résultantes d’une interrogation SELECT en une seule requête.
Le langage SQL version Oracle– Document 1.1 Feedbacks àanis.bach@isg.rnu.tn
Chapitre 7 : Le Langage de Définition de Données
4
REQ 69 Créez la table EMP1 dont les colonnes sont NUEMP, NOMEMP, NOMDEPT et EGRADE et y insérer les lignes convenables à partir des tables EMP, DEPT et SALGRADE ? CREATE TABLE EMP1(NUEMP NUMBER PRIMARY KEY, NOMEMP VARCHAR2(15), NOMDEPT VARCHAR2(15), EGRADE VARCHAR2(15)) AS SELECT EMPNO, ENAME, DNAME, GRADE FROM EMP E, DEPT D, SALGRADE S WHERE E.DEPTNO=D.DEPTNO AND E.SAL BETWEEN S.LOSAL AND S.HISAL; Naturellement, on doit respecter l’égalité du nombre des colonnes et de leurs types de données entre la définition de la table et la sélection de la requête SELECT. Il est possible également que la définition d’une table soit directement extraite à partir de la requête SELECT. REQ 70 Créez une table doublure de la table DEPT en structure et en données ? CREATE TABLE DEPTDOUB AS SELECT * FROM DEPT; Dans le cas, de création d’une table à clé primaire composée, cette contrainte est ajoutée à la fin de la requête. De même pour la contrainte unique qui peut porter sur plusieurs tables : REQ 71 Créez la table FPJ ? CREATE TABLE FPJ(NF NUMBER REFERENCES F(NF), NP NUMBER REFERENCES P(NP), NJ NUMBER REFERENCES J(NJ), QTE NUMBER, PRIMARY KEY(NF,NP,NJ)); 7.3Modification d’une table – ALTER TABLE La modification d’une table consiste à ajouter, renommer, modifier ou supprimer une colonne, ou à ajouter, modifier ou supprimer une contrainte. La requête de modification d’une table est ALTER TABLE. 7.3.1Renommer une table Il est possible de renommer une table de deux manières, via la requête RENAME ou encore la clause RENAME dans la requête ALTER TABLE. REQ 72 Renommer de deux manières la table EMP pour EMPLOYE ? RENAME EMP TO EMPLOYE; ALTER TABLE EMP RENAME TO EMPLOYE; 7.3.2Ajouter une colonne L’ajout de colonne se fait via la clause ADD. Une colonne ajoutée est mise à NULL pour toutes les lignes. Il en découle qu’on ne peut pas appliquer une contrainte sur cette colonne lui Le langage SQL version Oracle– Document 1.1 Feedbacks àanis.bach@isg.rnu.tn
Chapitre 7 : Le Langage de Définition de Données 4 interdisant d’avoir une valeur NULL à moins qu’elle soit affectée à une valeur par défaut ou que la table soit vide. REQ 73 Ajouter les colonnes téléphone TEL et Adresse ADR. La colonne TEL ne doit pas avoir la valeur NULL ? ALTER TABLE EMP ADD (TEL NUMBER(8) DEFAULT ‘00000000’ NOT NULL, ADR VARCHAR2(30)) ; 7.3.3Renommer une colonne Il est possible de renommer une colonne via la clause RENAME COLUMN. REQ 74 Renommer la colonne SAL pour SALARY dans la table EMP ? ALTER TABLE EMP RENAME COLUMN SAL TO SALARY; 7.3.4Modifier une colonne Ça revient à modifier son type de données via la clause MODIFY COLUMN. Il est possible d’augmenter la taille d’une colonne de type numérique ou chaîne de caractères et de la diminuer si toutes les valeurs de la colonne le permettent. Il est aussi possible de changer le type de données si la colonne en question ne contient que des valeurs NULL. On peut aussi changer du type CHAR au type VARCHAR2 (et vice versa) si les champs sont NULL ou si on ne change pas la taille. Finalement un changement de la valeur par défaut n’affecte que les insertions futures. REQ 75 Modifier la taille de la colonne JOB à 30 caractères variables ? ALTER TABLE EMP MODIFY (JOB VARCHAR2(30)); 7.3.5Supprimer une colonne La clause DROP COLUMN dans la requête ALTER TABLE permet de supprimer une colonne d’une table. Il est possible de supprimer des colonnes contenant des données à condition qu’elle ne soit pas l’unique colonne de la table ou référencée dans une autre table. Si la colonne est référencée par une colonne d’une autre table (fille), alors il faut ajouter l’option CASCADE CONSTRAINTS pour éliminer aussi la contrainte FOREIGN KEY de la colonne étrangère. REQ 76 Supprimer la colonne HIREDATE de la table EMP ? ALTER TABLE EMP DROP COLUMN HIREDATE;
Le langage SQL version Oracle– Document 1.1 Feedbacks àanis.bach@isg.rnu.tn
Chapitre 7 : Le Langage de Définition de Données
4
7.3.6Marquer une colonne L’option SET UNUSED marque une ou plusieurs colonnes pour une suppression ultérieure. En effet, la suppression d’une colonne (surtout pour des tables de grande taille) peut prendre un temps considérable contrairement à son marquage. Grâce à cette opération, la colonne marquée n’apparaît plus à l’utilisateur, une fois la base de données n’est plus interrogée fréquemment, on peut supprimer les colonnes marquées via la clause DROP UNUSED COLUMNS. REQ 77 ère ème Ecrire deux requêtes, la 1sert à marquer la colonne JOB pour la suppression, la 2sert à éliminer toutes les colonnes marquées ? ALTER TABLE EMP SET UNUSED (JOB); ALTER TABLE EMP DROP UNUSED COLUMNS; 7.3.7Ajouter une contrainte On peut ajouter une contrainte à une table existante en utilisant la requête ALTER TABLE et la clause ADD CONSTRAINT. Cette opération ne réussit que si les données qui existent déjà dans la table respectent la contrainte qu’on veut ajouter. REQ 78 Supposons que la table EMP n’est soumise à aucune contrainte. Ajoutez les contraintes nécessaires ? ALTER TABLE EMP ADD (CONSTRAINT PK1 PRIMARY KEY (EMPNO), CONSTRAINT FK_EMP_DEPT FOREIGN KEY(DEPTNO) REFERENCES DEPT(DEPTNO)) ; L’ajout d’une contrainte n’est possible que si les données qu’elle concerne, la respectent déjà.
7.3.8Désactivation/Activation de contraintes La désactivation d’une contrainte est possible via la clause DISABLE dans la requête ALTER TABLE. Parfois, on a besoin de désactiver une contrainte qui nous gênerait lors de l’insertion d’un grand nombre de lignes. Par exemple, lors de l’insertion d’un employé dans la table EMP, il faut s’assurer que son employeur existe déjà dans la table (la colonne MGR doit avoir une valeur qui existe déjà dans la colonne EMPNO). Pour ce, on pourrait désactiver la contrainte FOREIGN KEY de la colonne MGR, insérer toutes les lignes et réactiver la contrainte. La syntaxe de la clause DISABLE est la suivante : DISABLE PRIMARY KEY | UNIQUE(col) | CONSTRAINT cte [CASCADE] REQ 79 Désactiver la contrainte de clé étrangère concernant la colonne MGR ? ALTER TABLE EMP DISABLE CONSTRAINT FK_EMP_EMP ;
Le langage SQL version Oracle– Document 1.1 Feedbacks àanis.bach@isg.rnu.tn
Chapitre 7 : Le Langage de Définition de Données 4 Notons ici l’importance de nommer une contrainte lors de sa création, car la clause DISABLE ne réfère les contraintes FOREIGN KEY, NOT NULL et CHECKque par leurs noms (un nom que l’utilisateur donne à la contrainte, ou assigné par défaut par Oracle). La réactivation d’une contrainte se fait par la clause ENABLE. Il faut bien sûr que les données respectent déjà cette contrainte sinon sa réactivation échouera. Par exemple, si on veut réactiver la contrainte FK_EMP_EMP, il faut que la colonne MGR ne contienne aucune valeur n’appartenant pas à la colonne EMPNO. REQ 80 Réactiver la contrainte de clé étrangère sur la colonne MGR de la table EMP ? ALTER TABLE EMP ENABLE CONSTRAINT FK_EMP_EMP ; 7.3.9La suppression d’une contrainte La clause DROP CONSTRAINT permet de supprimer une contrainte d’une table. Elle est donc suivie par le nom de la contrainte (notons encore une fois l’importance du nom d’une contrainte) et optionnellement par le mot clé CASCADE. Si ce mot clé est précisé, alors la suppression d’une clé primaire d’une table mère, la suppression de la clé étrangère correspondante dans la table fille est effectuée automatiquement. 7.4Suppression d’une table – DROP TABLE La suppression d’une table est effectuée par la requête DROP TABLE, celleci détruirait les données et la structure de la table. Si votre table est une table mère, càd que sa clé primaire est référée par d’autres colonnes FOREIGN KEY qui sont dans une ou plusieurs tables filles, alors la suppression est impossible. La solution est d’utiliser l’option CASCADE CONSTRAINTS; dans ce cas là, les contraintes FOREIGN KEY –posées sur les colonnes des tables filles seront à leurs tours supprimés. REQ 81 Supprimer totalement la table DEPT ? DROP TABLE DEPT CASCADE CONSTRAINTS; 7.5Consultation des contraintes Vous pouvez visualiser vos contraintes en les sélectionnant à partir de la vue USER_CONSTRAINTS : REQ 82 Afficher les contraintes de la table EMP dont l’utilisateur a assignées un nom ? SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE FROM USER_CONSTRAINTS WHERE TABLE_NAME=’EMP’; Le langage SQL version Oracle– Document 1.1 Feedbacks àanis.bach@isg.rnu.tn
Chapitre 7 : Le Langage de Définition de Données 4 Vous pouvez aussi consulter les noms de colonnes (COLUMN_NAME) et le nom de la contrainte qui les concernent (CONSTRAINT_NAME) à partir de la vue USER_CONS_COLUMNS.
Le langage SQL version Oracle– Document 1.1 Feedbacks àanis.bach@isg.rnu.tn
  • Univers Univers
  • Ebooks Ebooks
  • Livres audio Livres audio
  • Presse Presse
  • Podcasts Podcasts
  • BD BD
  • Documents Documents