Télécharger en PDF
Introduction
SQL = Structured Query Language
un langage de d ́efinition de donn ́ees (LDD),
un langage de manipulation de donn ́ees (LMD),
un langage d’interrogation de donn ́ees (LID),
un langage de contrˆole de donn ́ees (LCD)
DDL = Data Definition Language (Langage de D ́efinition de
Donn ́ees LDD)
Cr ́eation d’une structure de donn ́ees (Create)
Modification de la structure d’un objet de la base de donn ́ees (Alter)
Suppression d’une structure de donn ́ees(Drop )
Cr ́eation de table
CREATE TABLE [schema.]<nom table>
(<nom colonne> type [DEFAULT expr],
<nom colonne> type [DEFAULT expr],
. . . . . .
) ;
Cr ́eation de table `a partir d’une sous-int ́errogation
Syntaxe
CREATE TABLE [schema.]<nom table>
(<nom colonne> type [DEFAULT expr],
<nom colonne> type [DEFAULT expr],
. . . . . .
) AS sous interrogation ;
Les contraintes
Il existe cinq types de contraintes :
NOT NULL
UNIQUE
CHECK
PRIMARY KEY
FOREIGN KEY
Il existe deux niveaux de d ́efinition de contraintes :
contrainte au niveau colonne : contrainte d’int ́egrit ́e incluse dans la
d ́efinition de la colonne
contrainte au niveau table : contrainte d’int ́egrit ́e incluse dans la
d ́efinition de la table
syntaxe : CREATE TABLE [schema.]table (nom colonne type
[DEFAULT expr] [contrainte niveau colonne], …
[contrainte niveau colonne][,…]) ;
On peut d ́efinir une contrainte :
lors de la cr ́eation de la table
apr`es la cr ́eation de la table
Les contraintes
La contrainte NOT NULL ne peut ˆetre d ́efinie qu’au niveau de la colonne, pas au niveau de la table
Exemple
CREATE TABLE Fournisseurs (fournisseur id number(10) NOT NULL, nom varchar2(20)
NOT NULL, contact varchar2(50)) ;
CREATE TABLE Fournisseurs (fournisseur id number(10) CONSTRAINT nn fournisseurs
NOT NULL, nom varchar2(20) NOT NULL, contact varchar2(50))
Les contraintes
La contrainte UNIQUE
Une contrainte d’int ́egrit ́e de type unique exige que chaque valeur dans une colonne ou dans un ensemble de colonnes soit unique. Une contrainte unique autorise la valeur NULL `a moins que vous d ́efinissiez des contraintes NOT NULL.
Exemple
Au niveau colonne :
CREATE TABLE Fournisseurs (fournisseur id number(10) UNIQUE, nom
varchar2(20) not null, contact varchar2(50)) ;
CREATE TABLE Fournisseurs (fournisseur id number(10) CONSTRAINT
uq fournisseurs UNIQUE, nom varchar2(20) not null, contact varchar2(50)) ;
Au niveau table :
CREATE TABLE Fournisseurs (fournisseur id number(10), nom varchar2(20) not null,
contact varchar2(50), CONSTRAINT uq fournisseurs UNIQUE(fournisseur id)) ;
La contrainte CHECK
- La contrainte Check d ́efinit une condition que chaque ligne de la table doit verifier
Les expressions suivantes ne sont pas autoris ́ees :
appels de fonction telle que SYSDATE
interrogations qui font r ́ef ́erence `a d’autres valeurs dans d’autres
lignes.
Exemple
Au niveau colonne :
CREATE TABLE Fournisseurs (fournisseur id number(10) CHECK (fournisseur id
between 10 and 1000), nom varchar2(20) not null, contact varchar2(50)) ;
CREATE TABLE Fournisseurs (fournisseur id number(10) CONSTRAINT
ck fournisseurs CHECK (fournisseur id between 10 and 1000), nom varchar2(20) not
null, contact varchar2(50)) ;
Au niveau table :
CREATE TABLE Fournisseurs (fournisseur id number(10), nom varchar2(20) not null,
contact varchar2(50), CONSTRAINT ck fournisseurs CHECK (fournisseur id between
10 and 1000)) ;
Les contraintes
La contrainte PRIMARY KEY
Une contrainte cl ́e primaire cr ́ee une cl ́e primaire pour la table
Une seule cl ́e primaire peut ˆetre cr ́e ́ee par table
La cl ́e primaire peut ˆetre constitu ́ee d’une ou plusieurs colonnes.
Aucune des colonnes faisant partie de la cl ́e primaire ne peut ˆetre
NULL
Exemple
Au niveau colonne :
CREATE TABLE Fournisseurs (fournisseur id number(10) PRIMARY KEY, nom
varchar2(20) not null, contact varchar2(50)) ;
CREATE TABLE Fournisseurs (fournisseur id number(10) CONSTRAINT
pk fournisseurs PRIMARY KEY, nom varchar2(20) not null, contact varchar2(50)) ;
Au niveau table :
CREATE TABLE Fournisseurs (fournisseur id number(10), nom varchar2(20) not null,
contact varchar2(50), CONSTRAINT pk fournisseurs PRIMARY
KEY(fournisseur id)) ;
CREATE TABLE Etudiants(nom varchar2(30), prenom varchar2(30), date naiss date,
CONSTRAINT pk etudiants PRIMARY KEY (nom,prenom))
Les contraintes
La contrainte FOREIGN KEY
Syntaxe
Au niveau table :
CREATE TABLE <nom table>
(<col1> type null/not null,
<col2> type null/not null,
…,
CONSTRAINT <fk table colonne> FOREIGN KEY (col1, col2, … coln) REFERENCES
<table parente> (col1, col2, … coln)
ON DELETE {CASCADE|SET NULL|SET DEFAULT|RESTRICT}
ON UPDATE {CASCADE|SET NULL|SET DEFAULT|RESTRICT}
) ;
Au niveau colonne :
CREATE TABLE <nom table>
(<col1> type null/not null CONSTRAINT <fk table colonne> REFERENCES <table parente>
(col) ON DELETE {CASCADE|SET NULL|SET DEFAULT|RESTRICT}
ON UPDATE {CASCADE|SET NULL|SET DEFAULT|RESTRICT},
<col2> type null/not null,
…,
) ;
Les contraintes
La contrainte FOREIGN KEY
FOREIGN KEY : d ́efinit la colonne dans la table fille au niveau
contrainte de table
REFERENCES : identifie la table et la colonne dans la table parente
Notez Bien
Cr ́eer les tables parentes avant les tables filles
Supprimer les tables filles avant les tables parentes
Les contraintes
La contrainte FOREIGN KEY : mot cl ́e ON DELETE
Les options possibles avec le mot cl ́e ON DELETE :
CASCADE : supprime les lignes d ́ependantes dans la table fille
lorsqu’une ligne de la table parente est supprim ́ee
SET NULL : convertit les valeurs des cl ́es ́etrang`eres d ́ependantes en
valeurs NULL. Cette contrainte ne peut ˆetre ex ́ecut ́ee que si toutes
les colonnes de cl ́e ́etrang`ere de la table cible acceptent des
valeurs NULL.
SET DEFAULT place la valeur par d ́efaut (qui suit ce param`etre)
dans la ligne de la table ́etrang`ere en cas d’effacement d’une valeur
correspondant `a la cl ́e (option n’est pas prise en charge dans oracle)
RESTRICT indique une erreur en cas d’effacement d’une valeur
correspondant `a la cl ́e (option n’est pas prise en charge dans oracle)
Les contraintes
La contrainte FOREIGN KEY : mot cl ́e ON UPDATE
Les options possibles avec le mot cl ́e ON UPDATE (option n’est pas prise
en charge dans oracle) :
CASCADE : met `a jour les lignes d ́ependantes dans la table fille
lorsqu’une ligne de la table parente est mise `a jour
SET NULL : convertit les valeurs des cl ́es ́etrang`eres d ́ependantes en
valeurs NULL. Cette contrainte ne peut ˆetre ex ́ecut ́ee que si toutes
les colonnes de cl ́e ́etrang`ere de la table cible acceptent des
valeurs NULL.
SET DEFAULT place la valeur par d ́efaut (qui suit ce param`etre)
dans la ligne de la table ́etrang`ere en cas de mise `a jour d’une valeur
correspondant `a la cl ́e
RESTRICT indique une erreur en cas de mise `a jour d’une valeur
correspondant `a la cl ́e
Les contraintes
La contrainte FOREIGN KEY
Exemple 1
CREATE TABLE Fournisseurs ( fournisseur id number(10) not null PRIMARY KEY, nom
varchar2(50) not null, contact varchar2(50)) ;
CREATE TABLE Produits (produit id number(10) not null, fournisseur id number(10) not null,
CONSTRAINT fk produits FOREIGN KEY (fournisseur id ) REFERENCES Fournisseurs
(fournisseur id ) ON DELETE cascade) ;
Exemple 2
CREATE TABLE Fournisseurs ( fournisseur id number(10) not null, nom varchar2(50) not null,
contact varchar2(50),CONSTRAINT pk fournisseur PRIMARY KEY (fournisseur id ,nom)) ;
CREATE TABLE Produits (produit id number(10) not null, fournisseur id number(10) not null,
nom varchar2(50) not null, CONSTRAINT fk produits FOREIGN KEY (fournisseur id , nom)
REFERENCES Fournisseurs (fournisseur id ,nom)) ;
Modification de table
L’instruction ALTER TABLE : permet de modifier la structure de la table
colonne :
ajouter une colonne (ADD)
modifier une colonne existante (MODIFY) –propri ́et ́e d’oracle
supprimer une colonne (DROP)
contrainte :
ajouter une contrainte (ADD CONSTRAINT)
supprimer une contrainte (DROP CONSTRAINT)
Modification de table
Ajouter une colonne
Syntaxe
ALTER TABLE <nom table> ADD (<column> type [DEFAULT expr] [,
<column> type][DEFAULT expr],…) ;
Exemple
ALTER TABLE Fournisseurs ADD( adresse varchar2(50), telephone
number(8) NOT NULL) ;
Modification de table
Modifier une colonne
La modification d’une colonne peut concerner :
le type de donn ́ees,
la taille,
la valeur par d ́efaut d’une colonne (affecte uniquement les nouvelles
insertions dans la table)
Syntaxe
ALTER TABLE <nom table> MODIFY (<column> type [DEFAULT
expr] [, <column> type][DEFAULT expr],…) ;
Exemple
ALTER TABLE Fournisseurs Modify(adresse varchar2(100), telephone
number(13)) ;
Modification de table
Supprimer une colonne
Syntaxe
ALTER TABLE <nom table> DROP (column1, column2, …) ;
Exemple
ALTER TABLE Fournisseurs DROP (adresse, telephone)
Modification de table
Ajouter une contrainte
Syntaxe
ALTER TABLE <nom table> ADD [CONSTRAINT <nom contrainte>] type contrainte
(<nom colonne>) ;
Exemples
ALTER TABLE Fournisseurs ADD CONSTRAINT uq fournisseurs UNIQUE(fournisseur id) ;
ALTER TABLE Fournisseurs ADD CONSTRAINT ck fournisseurs CHECK (fournisseur id
between 10 and 1000) ;
ALTER TABLE Fournisseurs ADD CONSTRAINT pk fournisseurs PRIMARY KEY
(fournisseur id) ;
ALTER TABLE Produits add constraint fk produits FOREIGN KEY (fournisseur id, nom)
REFERENCES Fournisseurs(fournisseur id, nom) ;
Pour ajouter une contrainte NULL/NOT NULL on utilise l’option MODIFY
Exemple :
ALTER TABLE Fournisseurs MODIFY contact CONSTRAINT nn fournisseurs contact NOT
NULL ;
Modification de table
Supprimer une contrainte
Syntaxe
ALTER TABLE <nom table> DROP CONSTRAINT
<nom contrainte> ;
Exemple
ALTER TABLE Fournisseurs DROP CONSTRAINT ck fournisseurs ;
ALTER TABLE Fournisseurs DROP CONSTRAINT pk fournisseurs
Modification de table
Activer/D ́esactiver une contrainte
Syntaxe
ALTER TABLE <nom table> ENABLE | DISABLE CONSTRAINT
<nom contrainte> ;
Exemple
CREATE TABLE T1(a1 number PRIMARY KEY, b1 varchar2(10)) ;
CREATE TABLE T2(a2 varchar2(10) PRIMARY KEY, b2 number CONSTRAINT fk T2 REFERENCES T1(a1)) ;
ALTER TABLE T1 ADD CONSTRAINT fk T1 FOREIGN KEY (b1) REFERENCES T2(a2) ;
=⇒Pour ins ́erer des lignes dans ces deux tables il faut d ́esactiver l’une des contraintes FOREIGN KEY :
ALTER TABLE T1 DISABLE CONSTRAINT fk T1 ;
=⇒ Ins ́erer les lignes dans T1 et T2 :
INSERT INTO T1 VALUES(1,’a’) ;
INSERT INTO T1 VALUES(2,’b’) ;
INSERT INTO T2 VALUES(’b’,1) ;
=⇒ Activer la contrainte fk T1 :
ALTER TABLE T1 ENABLE CONSTRAINT fk T1 ;
La v ́erification des valeurs ins ́er ́ees se fait lors de l’activation de la contrainte fk T1
Suppression de table
Syntaxe
DROP TABLE <nom table> ;
Remarque
Il existe aussi la commande TRUNCATE qui permet de vider la table.
Syntaxe :
TRUNCATE TABLE nom table ;
Renommage de table
Syntaxe
RENAME <ancien nom> TO <nouveau nom> ;
Exemple
RENAME Fournisseurs TO LesFournisseurs ;
Vue
Une vue est une table logique sur une ou plusieurs autres tables ou
vues,
Seule la d ́efinition de la vue (requˆete) est enregistr ́ee dans la base, et
pas les donn ́ees de la vue,
Limite l’acc`es `a la base de donn ́ees,
Facilite la cr ́eation des requˆetes complexes,
Pr ́esente les mˆemes donn ́ees sous diff ́erentes formes,
Il existe deux types de vues :
vue simple :
utilise une seule table
ne contient ni fonction ni groupe de donn ́ees
permet d’ex ́ecuter des instructions LMD (UPDATE, DELETE,
INSERT)
vue complexe :
utilise plusieurs tables
contient des fonctions ou des groupes de donn ́ees
ne permet pas des instructions LMD (UPDATE, DELETE, INSERT)
Cr ́eation et modification de vue
Syntaxe
CREATE [OR REPLACE ] [FORCE|NOFORCE] VIEW <nom vue> [(alias [, alias], . . . )]
AS SELECT <requˆete> [WITH CHECK OPTION [CONSTRAINT <nom contrainte>]]
[WITH READ ONLY [CONSTRAINT <nom contrainte>]] ;
FORCE : cr ́ee la vue que les tables existent ou non
alias : indique les noms des expressions s ́electionn ́ees par la requˆete de la vue. Le nombre
d’alias doit ˆetre ́egal au nombre d’expressions s ́electionn ́ees
WITH CHECK OPTION : n’autorise l’insertion et la mise `a jour des lignes que pour les
lignes auxquelles la vue peut acc ́eder (v ́erifient les conditions de la clause WHERE)
CONSTRAINT : donne un nom de contrainte aux restrictions WITH CHECK OPTION et
WITH READ ONLY (messages d’erreur mieux compr ́ehensibles)
WITH READ ONLY : aucune op ́eration LMD ne peut ˆetre ex ́ecut ́ee.
Notez Bien
Pour pouvoir ins ́erer dans une vue, la vue doit comprendre au moins les colonnes sur lesquelles on
a une contrainte NOT NULL
Cr ́eation et modification de vue
Exemple
CREATE TABLE Fournisseurs (fournisseur id number(10) PRIMARY KEY, nom
varchar2(20) not null, contact varchar2(50), code region number(3)) ;
1 CREATE OR REPLACE VIEW vue1 Fournisseurs 10 (numero,nom,region) AS SELECT
fournisseur id, nom, code region from fournisseurs where code region=10 ;
2 CREATE OR REPLACE VIEW vue2 Fournisseurs 10 (numero,nom,region) AS SELECT
fournisseur id, nom, code region from fournisseurs where code region=10 WITH CHECK
OPTION CONSTRAINT ck 10 ;
INSERT INTO vue2 Fournisseurs 10 VALUES (100, ’Daniel’,100) ;
=⇒ORA-01402 : vue WITH CHECK OPTION – violation de clause WHERE
INSERT INTO vue2 Fournisseurs 10 VALUES (100, ’Daniel’,10) ;
=⇒1 ligne(s) ins ́er ́ee(s).
3 CREATE OR REPLACE VIEW vue3 Fournisseurs 10 (numero,nom,region) AS SELECT
fournisseur id, nom, code region from fournisseurs where code region=10 WITH READ
ONLY
Suppression de vue
Syntaxe
DROP VIEW <nom vue> ;
Exemple
DROP VIEW vue3 Fournisseurs 10
Une s ́equence :
G ́en`ere automatiquement des num ́eros uniques
Est Partageable entre plusieurs utilisateurs et ́eventuellement entre
plusieurs tables
Permet de cr ́eer une valeur de cl ́e primaire
Syntaxe
CREATE SEQUENCE <nom sequence>
[INCREMENT BY <pas>]
[START WITH <valeur>]
[{MAXVALUE <valeur max> | NOMAXVALUE}]
[{MINVALUE <valeur min> | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE <cache> | NOCACHE}]
INCREMENT BY : d ́efinit l’intervalle entre les num ́eros (pas d’incr ́ementation)
START WITH : premier num ́ero de la s ́equence
MAXVALUE | NOMAXVALUE : valeur maximale
MINVALUE | NOMINVALUE : valeur minimale
CYCLE | NOCYCLE : la s ́equence peut continuer `a g ́en ́erer ou non des valeurs si la valeur
maximale (ou minimale) est atteinte (la valeur par d ́efaut NOCYCLE)
CACHE | NOCACHE : nombre de valeurs pr ́e-allou ́ees et conserv ́ees en m ́emoire (la valeur
par d ́efaut est cache=20)
Cr ́eation de s ́equence
Exemples
CREATE SEQUENCE sequence1 increment by 1 start with 1
maxvalue 5 ;
CREATE SEQUENCE sequence2 increment by 5 start with 10
maxvalue 100 NOCACHE NOCYCLE ;
CREATE SEQUENCE sequence3 increment by 1 start with 1
maxvalue 20 CACHE 10 CYCLE
CREATE SEQUENCE sequence4 increment by 5 start with -10
minvalue -20 maxvalue 5 cache 2 cycle ;
Notez Bien
La valeur du cache doit etre inf ́erieur ou ́egale au nombre de valeurs d’un
cycle
Modification de s ́equence
Syntaxe
ALTER SEQUENCE <nom sequence>
[INCREMENT BY <pas>]
[START WITH <valeur>]
[{MAXVALUE <valeur max> | NOMAXVALUE}]
[{MINVALUE <valeur min> | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE <cache> | NOCACHE}]
Exemple
ALTER SEQUENCE sequence1 maxvalue 10 cycle
Utilisation de s ́equence
L’utilisation d’une s ́equence se fait par des ”pseudo-colonnes” CURRVAL et NEXTVAL. On
parle de pseudo-colonne car cela se manipule un peu comme une colonne de table, mais ce
n’est pas une colonne de table.
CURRVAL : retourne la valeur courante de la s ́equence
NEXTVAL : incr ́emente la s ́equence et retourne la nouvelle valeur
Exemple
CREATE TABLE Tseq(a number, b varchar2(5)) ;
CREATE SEQUENCE seq increment by 5 start with -10 minvalue -20 maxvalue 5 cache 2
cycle ;
INSERT INTO Tseq values (seq.nextval, ’a’)
SELECT * FROM Tseq ;
SELECT seq.currval FROM dual ;
Suppression de s ́equence
Syntaxe
DROP SEQUENCE <nom sequence> ;
Exemple
DROP SEQUENCE seq ;
Un index est un objet de la base de donn ́ees qui permet d’acc ́el ́erer
la recherche des lignes. Il contient deux champs :
la cl ́e d’index
l’adresse du bloc de donn ́ees contenant la cl ́e
Un index peut ˆetre cr ́e ́e juste apr`es la cr ́eation d’une table ou sur
une table contenant d ́ej`a des lignes
Un index peut porter sur plusieurs colonnes : la cl ́e d’acc`es sera la
concat ́enation des diff ́erentes colonnes
Les index sont ind ́ependants logiquement et physiquement des tables
qu’ils indexent
Cr ́eation d’index
La cr ́eation d’index peut ˆetre :
Automatique : un index unique est cr ́ee automatiquement lors de la d ́efinition d’une
contrainte PRIMARY KEY ou contrainte UNIQUE
Manuelle : un index non unique peut ˆetre cr ́ee manuellement (cl ́es d’index peuvent
ˆetre dupliqu ́ees)
Syntaxe
CREATE [UNIQUE] INDEX <nom index> ON <nom table>(col1, col2,…)
Exemple
CREATE UNIQUE INDEX idx fournisseurs ON Fournisseurs (contact) ;
=⇒des valeurs dupliqu ́ees ne sont pas permise dans la colonne contact mˆeme si il y a pas une
contrainte UNIQUE sur cette colonne
Remarque
Il est possible de renommer un index
Syntaxe :
ALTER INDEX <ancien nom> RENAME TO <nouveau nom> ;
Cr ́eation d’index
Cr ́eez index si :
La colonne doit ˆetre souvent utilis ́ee dans la clause WHERE ou une
condition de jointure
La colonne contient un grand nombre de valeurs NULL
Deux ou plusieurs colonnes sont souvent utilis ́ees conjointement dans une
clause WHERE ou une condition de jointure
La table est de grande taille et la plupart des requˆetes doivent extraire
moins de 2 `a 4% des lignes
Ne pas cr ́eez index si :
La table est de petite taille
La table est souvent mise `a jour
Les colonnes ne sont pas souvent utilis ́ees comme condition dans une
requˆete
La plupart des requˆetes sont pr ́evues pour extraire un tr`es grand
pourcentage de lignes
Supression d’index
Syntaxe
DROP INDEX <nom index> ;
Exemple
DROP INDEX idx fournisseurs
Synonyme
Un synonyme est un alias sur un Objet de la base ou Sch ́ema, une
sorte de raccourcis.
L’objet peut ˆetre une table, une vue, une s ́equence, une proc ́edure,
une fonction, un package, etc
Le synonyme peut ˆetre publique ou priv ́e.
publique : accessible `a partir de tous sch ́ema et utilisateurs
priv ́e il sera accessible uniquement `a partir du sch ́ema dans lequel il a
́et ́e cr ́e ́e
Cr ́eer des synonymes pour :
masquer le vrai nom des objets et leur localisations
simplifier les noms des objets
́eviter le pr ́e-fixage dans les requˆetes avec le nom de son propri ́etaire
Cr ́eation et supression de synonyme
Cr ́eation :
Syntaxe
CREATE [OR REPLACE] [PUBLIC] SYNONYM
<nom synonyme> FOR [sch ́ema.]<nom objet> ;
Supression
Syntaxe
DROP SYNONYM <nom synonyme> ;