Vous êtes sur la page 1sur 39

10

Utiliser des instructions LDD pour crer


et grer des tables

Copyright 2007, Oracle. Tous droits rservs.

Objectifs
A la fin de ce chapitre, vous pourrez :
identifier les principaux objets de base de donnes
visualiser la structure d'une table
numrer les types de donnes disponibles
pour les colonnes
crer une table simple
expliquer le processus de dfinition de contraintes
lors de la cration d'une table
expliquer le fonctionnement des objets de schma

10 - 2

Copyright 2007, Oracle. Tous droits rservs.

Contenu du chapitre
Objets de base de donnes
Rgles d'appellation

Instruction CREATE TABLE :


Accs aux tables d'un autre utilisateur
Option DEFAULT

Types de donnes
Prsentation des contraintes NOT NULL, PRIMARY KEY,
FOREIGN KEY, CHECK
Cration d'une table l'aide d'une sous-interrogation
ALTER TABLE
Tables en lecture seule

Instruction DROP TABLE


10 - 3

Copyright 2007, Oracle. Tous droits rservs.

Objets de base de donnes

10 - 4

Objet

Description

Table

Unit lmentaire de stockage, constitue de lignes

Vue

Reprsente de faon logique des sous-ensembles


de donnes issus d'une ou de plusieurs tables

Squence

Gnre des valeurs numriques

Index

Amliore les performances de certaines interrogations

Synonyme

Attribue un autre nom un objet

Copyright 2007, Oracle. Tous droits rservs.

Rgles d'appellation
Les noms de table et de colonne :
doivent commencer par une lettre
doivent comporter entre 1 et 30 caractres
admettent uniquement les caractres
AZ, az, 09, _, $ et #
ne peuvent pas tre identiques au nom
d'un autre objet appartenant au mme utilisateur
ne doivent pas tre des mots rservs au serveur Oracle

10 - 5

Copyright 2007, Oracle. Tous droits rservs.

Contenu du chapitre
Objets de base de donnes
Rgles d'appellation

Instruction CREATE TABLE :


Accs aux tables d'un autre utilisateur
Option DEFAULT

Types de donnes
Prsentation des contraintes NOT NULL, PRIMARY KEY,
FOREIGN KEY, CHECK
Cration d'une table l'aide d'une sous-interrogation
ALTER TABLE
Tables en lecture seule

Instruction DROP TABLE


10 - 6

Copyright 2007, Oracle. Tous droits rservs.

Instruction CREATE TABLE


Vous devez disposer des lments suivants :
le privilge CREATE TABLE
une zone de stockage
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr][, ...]);

Vous indiquez :
le nom de la table
le nom, le type de donnes et la taille des colonnes

10 - 7

Copyright 2007, Oracle. Tous droits rservs.

Rfrencer les tables d'un autre utilisateur


Les tables appartenant d'autres utilisateurs
ne figurent pas dans le schma de l'utilisateur en cours.
Vous devez ajouter le nom du propritaire comme
prfixe ces tables.

10 - 8

USERA

USERB

SELECT *
FROM userB.employees;

SELECT *
FROM userA.employees;

Copyright 2007, Oracle. Tous droits rservs.

Option DEFAULT
Lors d'une insertion, indiquez une valeur de colonne
par dfaut.
... hire_date DATE DEFAULT SYSDATE, ...

Valeurs autorises : Valeurs littrales, expressions


ou fonctions SQL.
Valeurs non autorises : Nom d'une autre colonne
ou pseudo-colonne.
Le type de donnes par dfaut doit correspondre celui
de la colonne.
CREATE TABLE hire_dates
(id
NUMBER(8),
hire_date DATE DEFAULT SYSDATE);

10 - 9

Copyright 2007, Oracle. Tous droits rservs.

Crer des tables


Crez la table :
CREATE TABLE dept
(deptno
dname
loc
create_date

NUMBER(2),
VARCHAR2(14),
VARCHAR2(13),
DATE DEFAULT SYSDATE);

Vrifiez la cration de la table :


DESCRIBE dept

10 - 10

Copyright 2007, Oracle. Tous droits rservs.

Contenu du chapitre
Objets de base de donnes
Rgles d'appellation

Instruction CREATE TABLE :


Accs aux tables d'un autre utilisateur
Option DEFAULT

Types de donnes
Prsentation des contraintes NOT NULL, PRIMARY KEY,
FOREIGN KEY, CHECK
Cration d'une table l'aide d'une sous-interrogation
ALTER TABLE
Tables en lecture seule

Instruction DROP TABLE


10 - 11

Copyright 2007, Oracle. Tous droits rservs.

Types de donnes
Type de donnes Description
VARCHAR2(size) Donnes alphanumriques de longueur variable
CHAR(size)

Donnes alphanumriques de longueur fixe

NUMBER(p,s)

Donnes numriques de longueur variable

DATE

Valeur date-heure

LONG

Donnes alphanumriques de longueur variable (jusqu' 2 Go)

CLOB

Donnes alphanumriques (jusqu' 4 Go)

RAW et LONG
RAW

Donnes binaires raw

BLOB

Donnes binaires (jusqu' 4 Go)

BFILE

Donnes binaires stockes dans un fichier externe (jusqu' 4 Go)

ROWID

Nombre en base 64 reprsentant l'adresse unique d'une ligne


dans sa table

10 - 12

Copyright 2007, Oracle. Tous droits rservs.

Types de donnes date-heure


Vous pouvez utiliser plusieurs types de donnes date-heure :
Type de donnes

10 - 14

Description

TIMESTAMP

Date avec partie dcimale des secondes

INTERVAL YEAR TO
MONTH

Intervalle exprim en annes et en mois

INTERVAL DAY TO
SECOND

Intervalle exprim en jours, heures, minutes et


secondes

Copyright 2007, Oracle. Tous droits rservs.

Contenu du chapitre
Objets de base de donnes
Rgles d'appellation

Instruction CREATE TABLE :


Accs aux tables d'un autre utilisateur
Option DEFAULT

Types de donnes
Prsentation des contraintes NOT NULL, PRIMARY KEY,
FOREIGN KEY, CHECK
Cration d'une table l'aide d'une sous-interrogation
ALTER TABLE
Tables en lecture seule

Instruction DROP TABLE


10 - 16

Copyright 2007, Oracle. Tous droits rservs.

Inclure des contraintes


Les contraintes appliquent des rgles de niveau table.
Elles empchent la suppression d'une table dote
de dpendances.
Les types de contrainte valides sont les suivants :

10 - 17

NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK

Copyright 2007, Oracle. Tous droits rservs.

Rgles relatives aux contraintes


Vous pouvez nommer une contrainte ou laisser le serveur
Oracle gnrer un nom au format SYS_Cn.
Vous pouvez crer une contrainte l'un des stades suivants :
lors de la cration de la table
aprs la cration de la table

Vous pouvez dfinir une contrainte de niveau colonne


ou table.
Vous pouvez visualiser une contrainte dans le dictionnaire de
donnes.

10 - 18

Copyright 2007, Oracle. Tous droits rservs.

Dfinir des contraintes


Syntaxe :
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr]
[column_constraint],
...
[table_constraint][,...]);

Syntaxe d'une contrainte de niveau colonne :


column [CONSTRAINT constraint_name] constraint_type,

Syntaxe d'une contrainte de niveau table :


column,...
[CONSTRAINT constraint_name] constraint_type
(column, ...),

10 - 19

Copyright 2007, Oracle. Tous droits rservs.

Dfinir des contraintes


Exemple de contrainte de niveau colonne :
CREATE TABLE employees(
employee_id NUMBER(6)
CONSTRAINT emp_emp_id_pk PRIMARY KEY,
first_name
VARCHAR2(20),
...);

Exemple de contrainte de niveau table :


CREATE TABLE employees(
employee_id NUMBER(6),
first_name
VARCHAR2(20),
...
job_id
VARCHAR2(10) NOT NULL,
CONSTRAINT emp_emp_id_pk
PRIMARY KEY (EMPLOYEE_ID));

10 - 20

Copyright 2007, Oracle. Tous droits rservs.

Contrainte NOT NULL


Elle garantit que les valeurs NULL ne sont pas autorises
pour la colonne :

Contrainte NOT NULL


(La cl primaire
applique une
contrainte NOT NULL.)
10 - 21

Contrainte
NOT NULLNOT
NULL

Absence de contrainte NOT


NULL (N'importe quelle ligne
peut contenir une valeur
NULL pour cette colonne.)

Copyright 2007, Oracle. Tous droits rservs.

Contrainte UNIQUE

EMPLOYEES

Contrainte UNIQUE

INSERT INTO

Autoris
Non autoris :
existe dj

10 - 22

Copyright 2007, Oracle. Tous droits rservs.

Contrainte UNIQUE
Elle est dfinie au niveau table ou au niveau colonne :
CREATE TABLE employees(
employee_id
NUMBER(6),
last_name
VARCHAR2(25) NOT NULL,
email
VARCHAR2(25),
salary
NUMBER(8,2),
commission_pct
NUMBER(2,2),
hire_date
DATE NOT NULL,
...
CONSTRAINT emp_email_uk UNIQUE(email));

10 - 23

Copyright 2007, Oracle. Tous droits rservs.

Contrainte PRIMARY KEY

PRIMARY KEY

DEPARTMENTS

Non autoris
(valeur NULL)

INSERT INTO

Non autoris
(50 existe dj)
10 - 24

Copyright 2007, Oracle. Tous droits rservs.

Contrainte FOREIGN KEY


PRIMARY
KEY

DEPARTMENTS

EMPLOYEES
FOREIGN
KEY

INSERT INTO

10 - 25

Copyright 2007, Oracle. Tous droits rservs.

Non autoris
(9 n'existe pas)
Autoris

Contrainte FOREIGN KEY


Elle est dfinie au niveau table ou au niveau colonne :
CREATE TABLE employees(
employee_id
NUMBER(6),
last_name
VARCHAR2(25) NOT NULL,
email
VARCHAR2(25),
salary
NUMBER(8,2),
commission_pct
NUMBER(2,2),
hire_date
DATE NOT NULL,
...
department_id
NUMBER(4),
CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)
REFERENCES departments(department_id),
CONSTRAINT emp_email_uk UNIQUE(email));

10 - 26

Copyright 2007, Oracle. Tous droits rservs.

Contrainte FOREIGN KEY : Mots-cls


FOREIGN KEY : Dfinit la colonne dans la table enfant,
au niveau table.
REFERENCES : Identifie la table et la colonne
dans la table parent.
ON DELETE CASCADE : Supprime les lignes dpendantes
dans la table enfant en cas de suppression d'une ligne
dans la table parent.
ON DELETE SET NULL : Convertit les valeurs
de cl trangre dpendantes en valeurs NULL.

10 - 27

Copyright 2007, Oracle. Tous droits rservs.

Contrainte CHECK
Elle dfinit une condition laquelle chaque ligne
doit satisfaire.
Les expressions suivantes ne sont pas autorises :
Rfrences aux pseudo-colonnes CURRVAL, NEXTVAL,
LEVEL et ROWNUM
Appels de fonctions SYSDATE, UID, USER et USERENV
Interrogations faisant rfrence d'autres valeurs
dans d'autres lignes
..., salary NUMBER(2)
CONSTRAINT emp_salary_min
CHECK (salary > 0),...

10 - 28

Copyright 2007, Oracle. Tous droits rservs.

CREATE TABLE : Exemple


CREATE TABLE employees
( employee_id
NUMBER(6)
CONSTRAINT
emp_employee_id
PRIMARY KEY
, first_name
VARCHAR2(20)
, last_name
VARCHAR2(25)
CONSTRAINT
emp_last_name_nn NOT NULL
, email
VARCHAR2(25)
CONSTRAINT
emp_email_nn
NOT NULL
CONSTRAINT
emp_email_uk
UNIQUE
, phone_number
VARCHAR2(20)
, hire_date
DATE
CONSTRAINT
emp_hire_date_nn NOT NULL
, job_id
VARCHAR2(10)
CONSTRAINT
emp_job_nn
NOT NULL
, salary
NUMBER(8,2)
CONSTRAINT
emp_salary_ck
CHECK (salary>0)
, commission_pct NUMBER(2,2)
, manager_id
NUMBER(6)
CONSTRAINT emp_manager_fk REFERENCES
employees (employee_id)
, department_id NUMBER(4)
CONSTRAINT
emp_dept_fk
REFERENCES
departments (department_id));

10 - 29

Copyright 2007, Oracle. Tous droits rservs.

Violation de contraintes

UPDATE employees
SET
department_id = 55
WHERE department_id = 110;

Le dpartement 55 n'existe pas.

10 - 30

Copyright 2007, Oracle. Tous droits rservs.

Violation de contraintes
Vous ne pouvez pas supprimer une ligne qui contient une cl
primaire utilise comme cl trangre dans une autre table.
DELETE FROM departments
WHERE department_id = 60;

10 - 31

Copyright 2007, Oracle. Tous droits rservs.

Contenu du chapitre
Objets de base de donnes
Rgles d'appellation

Instruction CREATE TABLE :


Accs aux tables d'un autre utilisateur
Option DEFAULT

Types de donnes
Prsentation des contraintes NOT NULL, PRIMARY KEY,
FOREIGN KEY, CHECK
Cration d'une table l'aide d'une sous-interrogation
ALTER TABLE
Tables en lecture seule

Instruction DROP TABLE


10 - 32

Copyright 2007, Oracle. Tous droits rservs.

Crer une table


l'aide d'une sous-interrogation
Crez une table et insrez-y des lignes en associant
l'instruction CREATE TABLE et l'option AS subquery.
CREATE TABLE table
[(column, column...)]
AS subquery;

Faites correspondre le nombre de colonnes indiques


et le nombre de colonnes de la sous-interrogation.
Dfinissez les colonnes avec des noms et des valeurs
par dfaut.

10 - 33

Copyright 2007, Oracle. Tous droits rservs.

Crer une table


l'aide d'une sous-interrogation
CREATE TABLE dept80
AS
SELECT employee_id, last_name,
salary*12 ANNSAL,
hire_date
FROM
employees
WHERE
department_id = 80;

DESCRIBE dept80

10 - 34

Copyright 2007, Oracle. Tous droits rservs.

Contenu du chapitre
Objets de base de donnes
Rgles d'appellation

Instruction CREATE TABLE :


Accs aux tables d'un autre utilisateur
Option DEFAULT

Types de donnes
Prsentation des contraintes NOT NULL, PRIMARY KEY,
FOREIGN KEY, CHECK
Cration d'une table l'aide d'une sous-interrogation
ALTER TABLE
Tables en lecture seule

Instruction DROP TABLE


10 - 35

Copyright 2007, Oracle. Tous droits rservs.

Instruction ALTER TABLE


Utilisez l'instruction ALTER TABLE pour effectuer
les oprations suivantes :
Ajouter une nouvelle colonne
Modifier la dfinition d'une colonne existante
Dfinir une valeur par dfaut pour la nouvelle colonne
Supprimer une colonne
Renommer une colonne
Mettre une table en lecture seule

10 - 36

Copyright 2007, Oracle. Tous droits rservs.

Tables en lecture seule


Pour placer une table en mode lecture seule, utilisez la syntaxe
ALTER TABLE :
Cela empche les modifications LDD ou LMD pendant la
maintenance de la table.
Il est ensuite possible de revenir au mode lecture/criture.
ALTER TABLE employees READ ONLY;
-- perform table maintenance and then
-- return table back to read/write mode
ALTER TABLE employees READ WRITE;

10 - 37

Copyright 2007, Oracle. Tous droits rservs.

Contenu du chapitre
Objets de base de donnes
Rgles d'appellation

Instruction CREATE TABLE :


Accs aux tables d'un autre utilisateur
Option DEFAULT

Types de donnes
Prsentation des contraintes NOT NULL, PRIMARY KEY,
FOREIGN KEY, CHECK
Cration d'une table l'aide d'une sous-interrogation
ALTER TABLE
Tables en lecture seule

Instruction DROP TABLE


10 - 38

Copyright 2007, Oracle. Tous droits rservs.

Supprimer une table


Place une table dans la corbeille.
Supprime entirement la table et l'ensemble de ses donnes
si la clause PURGE est indique.
Invalide les objets dpendants et supprime les privilges
objet associs la table.
DROP TABLE dept80;

10 - 39

Copyright 2007, Oracle. Tous droits rservs.

Synthse
Ce chapitre vous a prsent l'instruction CREATE TABLE
et les contraintes. Vous avez appris :
identifier les principaux objets de base de donnes
visualiser la structure d'une table
numrer les types de donnes disponibles
pour les colonnes
crer une table simple
expliquer le processus de dfinition de contraintes
lors de la cration d'une table
expliquer le fonctionnement des objets de schma

10 - 40

Copyright 2007, Oracle. Tous droits rservs.

Prsentation de l'exercice 10
Dans cet exercice, vous allez :
crer de nouvelle tables
crer une nouvelle table l'aide de la syntaxe CREATE
TABLE AS
vrifier l'existence de tables
mettre une table en lecture seule
supprimer des tables

10 - 41

Copyright 2007, Oracle. Tous droits rservs.

Vous aimerez peut-être aussi