Vous êtes sur la page 1sur 7

Langage LDD

CHAPITRE 2 : Langage de
Définition de Données
1. Introduction
SQL : (Structured Query Language : langage de requêtes structuré) est un langage
complet pour gérer une base de données relationnelle ; il est composé de trois
sous-ensembles.
- un langage de définition de données (LDD ou en anglais DDL Data Definition
Language)), c'est-à-dire qu'il permet de créer des tables dans une base de données
relationnelle, et de mettre à jour la structure de la base de données (tables,
attributs, vues, index, ...).
- un langage de manipulation de données (LMD ou en anglais DML, Data
Manipulation Language), cela signifie qu'il permet de sélectionner, insérer,
modifier ou supprimer des données dans une table d'une base de données
relationnelle.
- un langage de protections d'accès, Il est possible avec SQL de définir des
permissions au niveau des utilisateurs d'une base de données. On parle de DCL
(Data Control Language).
Le langage SQL peut être considéré comme le langage d’accès normalisé aux
bases de données. Il est supporté par la plupart des produits commerciaux que ce
soit par les systèmes de gestion de bases de données Microsoft tel que Access ou
par les produits plus professionnels tels que Oracle, SQLServer, etc. Il a fait
l’objet de plusieurs normes ANSI/ISO dont la plus répandue aujourd’hui est la
norme SQL3.
Le succès du langage SQL est dû essentiellement à sa simplicité et au fait qu’il
s’appuie sur le schéma conceptuel pour énoncer des requêtes en laissant le SGBD
responsable de la stratégie d’exécution.
Néanmoins, le langage SQL ne possède pas la puissance d’un langage de
programmation : entrées/sorties, instructions conditionnelles, boucles et
affectations. Pour certains traitements il est donc nécessaire de coupler le langage
SQL avec un langage de programmation plus complet tel que PLSQL, VB,
Wlangage de Windev, etc

Saoussen REKHIS Page 11


Langage LDD

2. Types de données
Pour chaque attribut que l'on crée, il faut préciser le type de données que le champ
va contenir. Les types de données disponibles en SQL varient d'un SGBD à l'autre,
on peut néanmoins citer les types les plus utilisés que l'on retrouve dans le SGBD
Oracle :

Type de Syntaxe Description


données
Type CHAR(n) Chaîne de caractères de longueur fixe
alphanumérique n (n ≤ 2000 octets). La chaîne sera
complétée à droite par des espaces, si
la longueur est inférieure à n.
Type VARCHAR2(n) Chaîne de caractères de longueur
alphanumérique variable de n caractères au maximum
(n≤4000 octets).
Type numérique NUMBER Nombre entier ou décimal sur 40
positions au maximum.
Type numérique NUMBER(n) Nombre entier sur n positions.
Type numérique NUMBER(n, m) Nombre décimal pouvant avoir au
maximum n chiffres dont m chiffres
après la virgule.
Type horaire DATE Date précisant le jour, le mois et
l’année. Le format diffère selon le
pays ('DD/MM/YY') ou
('DD-Mon-YYYY').
Type horaire TIMESTAMP Donnée de type date stockant l'année,
[(fractional_seconds_precision)] le mois, le jour, l'heure, les minutes,
les secondes et les fractions de
secondes dont le nombre de chiffres
n est exprimé par le paramètre
(fractional_seconds_precision).
Le nombre n est compris entre 0 et 9.
La valeur par défaut de n est égale à
6.

3. Contraintes d’intégrité
Une contrainte d’intégrité est une règle qui permet de contrôler la validité et la
cohérence des valeurs entrées dans les différentes tables de la base.
Elle peut être définie sous deux formes :
- Dans les commandes de création des tables.
- Au moment de la modification de la structure de la table.

Saoussen REKHIS Page 12


Langage LDD

Il existe des contraintes :


• Sur un attribut : La contrainte porte sur un seul attribut. Elle suit la
définition de l’attribut.
Ces contraintes sont :
- NOT NULL : Spécifie que pour toute occurrence, l’attribut doit avoir une
valeur (la saisie de ce champ est obligatoire).
- UNIQUE : Toutes les valeurs de l’attribut sont distinctes.
- PRIMARY KEY : L’attribut est une clé primaire pour la table.
- REFERENCES table (attribut) : Il s’agit d’une contrainte d’intégrité
fonctionnelle par rapport à une clé ; chaque valeur de l’attribut doit exister
dans la table dont l’attribut est référencé. On utilise cette contrainte pour les
clés étrangères.
- CHECK : C’est une contrainte associée à une condition qui doit être vérifiée
par toutes les valeurs de l’attribut (domaine des valeurs de l’attribut).
• Sur une table : La contrainte porte sur un ensemble d’attributs d’une même
table. Une virgule sépare la définition d’une contrainte de table des
définitions des attributs. Ces contraintes sont :
- UNIQUE (attri, attrj,…) : L’unicité porte sur le n-uplet des valeurs.
- PRIMARY KEY (attri, attrj,…) : Clé primaire de la table (clé composée).
- FOREIGN KEY (attri, attrj, …) REFERENCES table (attrm, attrn, …)
[ON DELETE CASCADE] : Désigne une clé étrangère sur un ou plusieurs
attributs. L’option ON DELETE CASCADE indique que la suppression
d’une ligne de la table de référence va entraîner automatiquement la
suppression des lignes référencées.
Il est possible de donner un nom à une contrainte grâce au mot clé CONSTRAINT
suivi du nom que l'on donne à la contrainte, de telle manière à ce que le nom
donné s'affiche en cas de non respect de l'intégrité, c'est-à-dire lorsque la clause
que l'on a spécifiée n'est pas validée.

4. Création d’une table


La création de tables se fait à l'aide du couple de mots-clés CREATE TABLE.
Syntaxe :
CREATE TABLE nom_table
(Attribut1 Type [Contrainte d’attribut],
Attribut2 Type [Contrainte d’attribut],

Attributn Type [Contrainte d’attribut],
[Contrainte de table], …);

Saoussen REKHIS Page 13


Langage LDD

Application :
- Création de la table Dept dont la description est la suivante :
DEPT (DEPTNO, DNAME, LOC)

CREATE TABLE Dept


(DEPTNO NUMBER(2) CONSTRAINT pk_deptno PRIMARY KEY,
DNAME VARCHAR2(12) NOT NULL,
DLOC VARCHAR2(15));

- Création de la table Emp dont la description est la suivante :


EMP (EMPNO, ENAME, JOB, MGR#, HIREDATE, SAL, COMM, DEPTNO#)

CREATE TABLE EMP


(EMPNO NUMBER(4) CONSTRAINT pk_empno PRIMARY KEY,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4) CONSTRAINT fk_mgr REFERENCES EMP (EMPNO),
HIREDATE DATE,
SAL NUMBER(8, 3) CHECK (SAL>500),
COMM NUMBER(8, 3) DEFAULT NULL,
DEPTNO NUMBER(2),
CONSTRAINT fk_deptno FOREIGN KEY (DETNO) REFERENCES DEPT
(DEPTNO));

5. Insertion de lignes à la création


Il est possible de créer une table en insérant directement des lignes lors de la
création. Les lignes à insérer peuvent être alors récupérées d'une table existante
grâce au prédicat AS SELECT.
Syntaxe :
CREATE TABLE nom_table
(Attr1 Type [Définition de Contrainte],
Attr2 Type [Définition de Contrainte],
...)
AS SELECT Attr1, Attr2, ...
FROM nom_table2
WHERE Condition;

Saoussen REKHIS Page 14


Langage LDD

6. Modification de la structure d’une table


La clause ALTER permet l’ajout de nouveaux attributs, la modification des
attributs ou la suppression des attributs d'une table.
6.1. Ajout d’un attribut
La clause ALTER permet d’ajouter un attribut à la structure initiale de la table.
Syntaxe :
ALTER TABLE Nom_Table
ADD Attribut Type;
Application :
Ajout de l’attribut ADR (adresse) à la table EMP.
ALTER TABLE EMP
ADD ADR VARCHAR2(20));
6.2. Modification d’un attribut
Associée avec la clause MODIFY, la clause ALTER permet la modification du
type de données d'un attribut. On ne peut qu’agrandir la taille d’un attribut.
Syntaxe :
ALTER TABLE Nom_Table
MODIFY Attribut Nouveau_Type;
Application :
Modification de la taille de l’attribut DLOC de la table DEPT à VARCHAR2(20).
ALTER TABLE DEPT
MODIFY DLOC VARCHAR2(20);
6.3. Suppression d’un attribut
Associée avec la clause DROP COLUMN, la clause ALTER permet de supprimer
un attribut d’une table.
Syntaxe :
ALTER TABLE Nom_Table
DROP COLUMN Attribut ;

Il faut noter que la suppression d’attributs (colonnes) n'est possible que dans le
cas où :
· L’attribut ne fait pas partie d'une vue,
· L’attribut ne fait pas partie d'un index,
· L’attribut n'est pas l'objet d'une contrainte d'intégrité.

Saoussen REKHIS Page 15


Langage LDD

6.4. Ajout de contrainte


Associée avec la clause ADD CONSTRAINT, la clause ALTER permet d’ajouter
une contrainte au niveau d’une table.
Syntaxe :
ALTER TABLE Nom_Table
ADD CONSTRAINT Nom_Contrainte Définition_Contrainte;
Application :
Ajout de la contrainte CHECK sur l’attribut SAL (SAL > 100) de la table EMP.
ALTER TABLE EMP
ADD CONSTRAINT ck_sal CHECK (SAL > 100);
6.5. Suppression de contrainte
Associée avec la clause DROP CONSTRAINT, la clause ALTER permet de
supprimer une contrainte.
Syntaxe :
ALTER TABLE Nom_Table
DROP CONSTRAINT Nom_Contrainte;
6.6. Désactivation d’une contrainte
Associée avec la clause DISABLE CONSTRAINT, la clause ALTER permet de
désactiver une contrainte qui est par défaut active (au moment de sa création).
Syntaxe :
ALTER TABLE Nom_Table
DISABLE CONSTRAINT Nom_Contrainte;
6.7. Activation d’une contrainte
Associée avec la clause ENABLE CONSTRAINT, la clause ALTER permet
d’activer une contrainte désactivée.
Syntaxe :
ALTER TABLE Nom_Table
ENABLE CONSTRAINT Nom_Contrainte;

7. Création d’index
La création d’un index permet d’accélérer les recherches d’informations dans la
base. La ligne est retrouvée instantanément si la recherche peut utiliser un index,
sinon la recherche se fait séquentiellement. Une autre utilité de la création d’index
est de garantir l’unicité de la clé en utilisant l’option UNIQUE.

Saoussen REKHIS Page 16


Langage LDD

Syntaxe :
CREATE [UNIQUE] INDEX nom_index
ON nom_table (Attr1[ASC/DESC], Attr2[ASC/DESC], …);
· L'option UNIQUE permet de définir la présence ou non de doublons pour les
valeurs de l’attribut.
· Les options ASC/DESC permettent de définir un ordre de classement des
valeurs de l’attribut.
Remarque :
1. Ne pas créer d’index pour les tables moins de 200 à 300 lignes
2. Indexer les colonnes qui interviennent souvent dans les clauses Where,
Group by et Order by.

8. Suppression d’une table / un index


La clause DROP permet d'éliminer des vues, des index et même des tables. Cette
clause est toutefois à utiliser avec précaution dans la mesure où elle est
irréversible.
Syntaxe :
· Pour supprimer un index : DROP INDEX Nom_Index [ON Nom_Table];
· Pour supprimer une table : DROP TABLE Nom_table ;
NB :
· Le nom de la table est obligatoire si on veut supprimer un index d’une table d’un
autre utilisateur.
· Un index est automatiquement supprimé dès qu’on supprime la table à laquelle
il appartient.

Saoussen REKHIS Page 17