Vous êtes sur la page 1sur 45

BASES DE DONNEES AVANCEES

Lotfi NAJDI
Année Universitaire 2020 / 2021
Licence Professionnelle Génie Informatique
Faculté Polydisciplinaire de Taroudant
Langage de manipulation de données

 Une instruction LMD est exécutée dans les cas suivants :

 Vous ajoutez de nouvelles lignes à une table.

 Vous modifiez des lignes existantes d'une table.

 Vous supprimez des lignes existantes d'une table.

 Une transaction est composée d'un ensemble d'instructions LMD qui forment une unité de travail

logique.
Exemple de transaction

Lorsqu'un client de la banque transfère de l'argent d'un compte d'épargne vers un compte

chèques, la transaction peut être décomposée en trois opérations distinctes :

1. débit du compte d'épargne.

2. crédit du compte chèques.

3. enregistrement de la transaction dans le journal des transactions.

Le serveur Oracle doit vérifier que les trois instructions SQL sont exécutées de manière à

préserver l'équilibre des comptes. Si quelque chose empêche l'exécution de l'une des

instructions de la transaction, les autres instructions doivent être annulées.


L'instruction INSERT

 Permet d’insérer une ou plusieurs lignes de données dans une table

 L’ajout de ligne n’est réalisé que si toutes les contraintes sont respectées : Clé primaire, clés

étrangères, contraintes NOT NULL, contraintes CHECK etc.

 Les colonnes qui sont omises sont valorisées à leur valeur DEFAULT si elle existe, sinon NULL

 INSERT permet d’ajouter une ou plusieurs lignes dans la table destination :

- une ligne à travers l’utilisation du mot-clé VALUES

- plusieurs lignes éventuellement si on utilise le résultat d’une clause SELECT


Ajoutez une nouvelle ligne à une table

Nouvelle ligne
DEPARTMENTS

Insérer une nouvelle ligne la


table DEPARTMENTS.
L'instruction INSERT

Ajouter de nouvelles lignes à une table à l’aide de l’instruction INSERT:

INSERT INTO table [(colonne1, ...)]


VALUES (expression, ...);

INSERT unitaire (une seule ligne).


L'instruction INSERT

Ajouter de nouvelles lignes à une table à l’aide de l’instruction INSERT :

INSERT INTO departments(department_id, department_name,


manager_id, location_id)

VALUES (70, 'Public Relations', 100, 1700);

• Insère une nouvelle ligne contenant des valeurs pour chaque colonne.

• Indiquez VALUES dans l'ordre par défaut des colonnes de la table.

• Il est recommandé de citer toutes les colonnes, pour des raisons de lisibilité et de maintenabilité

• Mettez les valeurs des caractères et des dates entre guillemets simples.
Insérer des valeurs NULL

 Méthode implicite : Omettre la colonne dans la liste des colonnes

INSERT INTO departments (department_id, department_name)


VALUES (30, 'Purchasing');

 Méthode explicite : Indiquer le mot-clé NULL dans la clause VALUES.

INSERT INTO departments


VALUES (100, 'Finance', NULL, NULL);
Insérer des valeurs spéciales

La fonction SYSDATE enregistre la date du jour et l'heure actuelle.

INSERT INTO employees (employee_id,


first_name, last_name,
email, phone_number,
hire_date, job_id, salary,
commission_pct, manager_id,
department_id)
VALUES (113,
'Louis', 'Popp',
'LPOPP', '515.124.4567',
SYSDATE, 'AC_ACCOUNT', 6900,
NULL, 205, 110);
Créer un script

 Utilisez le symbole & dans l’instruction INSERT pour demander la saisie des valeurs .
 & est un paramètre de substitution permettant de renseigner les variables utilisateur au moment de
l’exécution.

INSERT INTO departments (department_id, department_name, location_id)

VALUES (&department_id, '&department_name', &location);


Copier des lignes depuis une autre table

 Ecrivez votre instruction INSERT avec une sous interrogation :

INSERT INTO sales_reps(id, name, salary, commission_pct)


SELECT employee_id, last_name, salary, commission_pct
FROM employees
WHERE job_id LIKE '%REP%';

 N'utilisez pas la clause VALUES.

 Le nombre de colonnes de la clause INSERT doit correspondre à celui de la sous-interrogation.

 Insère toutes les lignes renvoyées par la sous-interrogation dans la table sales_reps.
L'instruction UPDATE

 Permet de mettre à jour certaines colonnes de lignes existantes dans une table

 Si aucune condition n’est indiquée, toutes les lignes sont mises à jour

 La mise à jour des lignes n’est réalisée que si toutes les contraintes sont respectées
Modification des données dans une table

EMPLOYEE
S

MAJ les lignes de la table EMPLOYEEStable:


L'instruction UPDATE

 UPDATE élémentaire :

UPDATE table
SET column = value [, column = value, ...]
[WHERE condition];

 Modifier les valeurs existantes dans une table.

 Mettre à jour plus d'une ligne à la fois (en cas de besoin).


L'instruction UPDATE

 Les valeurs pour une ou plusieurs lignes sont mises à jour si on spécifie la clause WHERE :

UPDATE employees
SET department_id = 50
WHERE employee_id = 113;

 Les valeurs de toutes les lignes de la table sont modifiées si la clause WHERE est omise

UPDATE copy_emp
SET department_id = 110;

• Pour mettre à jour la valeur d'une colonne à NULL, utilisez SET column_name= NULL .
L'instruction UPDATE

UPDATE complexe : les colonnes peuvent être mises à jour avec le résultat d’une requête

SELECT

UPDATE table SET (colonne1, ...) =


SELECT (colonne1, ... FROM table ... )
[WHERE condition];
Mettre à jour deux colonnes avec une sous-interrogation

Mettez à jour le poste et le salaire de l'employé 113 de sorte qu'ils correspondent à ceux de

l'employé 205.

UPDATE employees
SET job_id = (SELECT job_id
FROM employees
WHERE employee_id = 205),
salary = (SELECT salary
FROM employees
WHERE employee_id = 205)
WHERE employee_id = 113;
Mettre à jour deux colonnes avec une sous-interrogation

L'exemple précédent peut aussi être écrit comme suit :

UPDATE employees
SET (job_id, salary) = (SELECT job_id, salary
FROM employees
WHERE employee_id = 205)
WHERE employee_id = 113;
L'instruction DELETE

 Permet de supprimer un groupe de lignes d’une table en fonction des conditions

exprimées

 Si aucune condition n’est indiquée, toutes les lignes sont supprimées

 La suppression des lignes n’est réalisée que si toutes les contraintes sont respectées

(il n’est pas possible de supprimer une ligne qui est référencée par une autre ligne dans une table fille

via une contrainte de clé étrangère.)


L'instruction DELETE

 Si des enregistrements existent dans des tables filles, une erreur ORA-02292 (violation de contrainte

d’intégrité) peut être levée.

 Dans ce cas, il est nécessaire de supprimer au préalable les enregistrements fils rattachés , sauf si la

contrainte d’intégrité référentielle a été créée avec l’option « ON DELETE CASCADE » ou « ON

DELETE SET NULL », auquel cas Oracle supprime automatiquement les enregistrements fils, ou

valorise à NULL les colonnes concernées dans la table fille.


Supprimer les lignes d’une table

DEPARTMENTS

Supprimez une ligne de la table DÉPARTEMENTS :


L'instruction DELETE

Syntaxe :

DELETE [FROM] table [WHERE condition];

Supprimer des lignes existantes d'une table.


L'instruction DELETE

Si la clause WHERE est renseignée , des lignes spécifiques sont supprimées

DELETE FROM departments


WHERE department_name = ‘Finance';

Si la clause WHERE n’est pas renseignée , alors toutes les lignes de table seront supprimées

DELETE FROM copy_emp;


Supprimer des lignes sur la base d'une autre table

 Utilisez les sous-interrogations dans les instructions DELETE

 Pour supprimer des lignes d'une table sur la base des valeurs d'une autre table :

DELETE FROM employees


WHERE department_id =
(SELECT department_id
FROM departments
WHERE department_name
LIKE '%Public%');
L'instruction TRUNCATE

Syntaxe : TRUNCATE TABLE table ;

Exemple: TRUNCATE TABLE copy_emp;

 Supprime toutes les lignes d'une table.

 Suite à l’exécution de TRUNCATE sur une table , cette dernière devient vide cependant

sa structure reste intacte.

 Instruction DDL est non pas DML (ne peut être facilement annulée )
L'instruction TRUNCATE

 TRUNCATE est une alternative à l’ordre DELETE beaucoup plus performante (quasi-instantanée,

même si très grosse table, très peu de ressources consommées)

 Pas de conditions possibles et pas de contraintes FK

 Instruction DDL : COMMIT automatique, pas de ROLLBACK possible

 Instruction à utiliser dans un contexte batch, pour purger efficacement une table de travail qui n’est

pas en relation (FK) avec d’autres tables.


Transactions

 Le serveur Oracle garantit la cohérence des données par l'intermédiaire des transactions.

Ces dernières offrent davantage de souplesse et de contrôle lors de la modification des

données.

 Les transactions permettent de garantir la cohérence des données en cas de défaillance

du système ou d'échec d'un processus utilisateur.


Transactions de base de données

Une transaction peut correspondre à :

 Des instructions faisant partie du LMD ou DML qui constituent une modification cohérente des

données.

 Une instruction de type LDD ou DDL (CREATE, DROP, ALTER, TRUNCATE…)

 Une instruction faisant partie du LCD pour langage de contrôle de données ou DCL ( GRANT,

REVOKE)
Transactions de base de données : Début et fin

Elles commencent implicitement

 Lors de l’ouverture de session

 A l'exécution de la première instruction SQL LMD.

Elles prennent fin lorsque l’un des évènements suivants se produit:

 Une instruction COMMIT ou ROLLBACK est exécutée.

 Une instruction LDD ou LCD est exécutée (commit c.-à-d. validation automatique).

 L'utilisateur quitte SQL DEVELOPER ou SQL*Plus.

 Le système connaît une défaillance (crashes).


Avantages des instructions COMMIT et ROLLBACK

Les instructions COMMIT et ROLLBACK permettent de :

• Garantir la cohérence des données (data consistency)

• Pré visualiser les modification effectuées sur données avant de les rendre définitives

• Regrouper des opérations interdépendantes (logiquement liées )

• Les instructions COMMIT et ROLLBACK permettent de contrôler la validation des

modifications apportées aux données.


Instructions de Contrôle explicite des transactions
Le contrôle de la logique des transactions peut être accompli à travers l’utilisation des instructions
suivantes :

Instruction Description

COMMIT Met fin à la transaction en cours en rendant permanentes toutes les

modifications de données en attente

ROLLBACK ROLLBACK met fin à la transaction en cours en annulant toutes les

modifications de données en attente.

SAVEPOINT name Marque un point de sauvegarde SAVEPOINT dans la transaction en cours

ROLLBACK TO Ramène (faire reculer ou restaurer ) la transaction en cours au point de

SAVEPOINT name sauvegarde spécifié. Ce qui aura comme conséquence l’annulation de toutes

modifications et/ou la suppression des points de sauvegarde qui sont créés

après le point de sauvegarde passé en entrée ROLLBACK TO SAVEPOINT.


Instructions de Contrôle explicite des transactions

Time COMMIT

Transaction

DELETE

SAVEPOINT A

INSERT

UPDATE

SAVEPOINT B

INSERT

ROLLBACK ROLLBACK
ROLLBACK
TO SAVEPOINT B TO SAVEPOINT A
Traitement implicite des transactions

 Un COMMIT (validation ) automatique se produit dans les cas suivants :

• Une instruction LDD est exécutée.

• Une instruction LCD est exécutée.

• Fermeture normale de SQL DEVELOPER ou de SQL*Plus sans émettre explicitement d’instruction COMMIT

ou ROLLBACK.

 En cas d’arrêt anormal d’un composant (client, réseau, serveur) une opération d’annulation ROLLBACK

est alors effectuée implicitement


État des données avant COMMIT ou ROLLBACK

 L'état antérieur des données peut être récupéré.

 L’état transitoire des données n’est accessible qu’au sein de la session effectuant les opérations ;Les

autres utilisateurs (sessions ), ne peuvent pas voir les résultats des déclarations DML émises par

l'utilisateur actuel.

 Des verrous sont positionnés au niveau des lignes/colonnes impactées afin de garantir la cohérence

des données. D’autres utilisateurs ne pourront effectuer de modifications simultanées sur les données.
État des données après COMMIT

 Les modifications apportées aux données sont rendues permanents (dans la base de données)

 L'état antérieur des données est supprimé

 Tous les utilisateurs peuvent visualiser les résultats.

 Les verrous (Locks) sont libérés et les lignes deviennent disponibles pour d'autres utilisateurs qui

peuvent les modifier.

 Les points de sauvegarde (SAVEPOINT) sont supprimés.


Instruction COMMIT

Apporter les modifications :

DELETE FROM employees


WHERE employee_id = 99999;

INSERT INTO departments


VALUES (290, 'Corporate Tax', NULL, 1700);

Valider les modifications :

COMMIT;
État des données après ROLLBACK

Annulez toutes les modifications en attente à l'aide de l'instruction ROLLBACK :

 Les modifications apportées aux données sont annulées.

 L'état antérieur des données est restauré.

 Les verrous externes des lignes affectées sont libérés.

DELETE FROM copy_emp;


ROLLBACK ;
Read Consistency

• La cohérence de la lecture garantit une vue cohérente des données à tout moment.

• Les modifications apportées par un utilisateur n'entrent pas en conflit avec les
modifications apportées par un autre utilisateur.

• La cohérence de lecture permet de s'assurer que, sur les mêmes données :

• Les personnes qui effectuent des opérations de lectures (Readers ) n'attendent pas
que les writers terminent leurs opérations.

• Writers ne doivent pas attendre les readers.

• Writers doivent attendre les writers


Read Consistency

• La cohérence de lecture est gérée de manière automatique par oracle.

• Elle conserve une copie partielle de la base de données dans les segments d'annulation (Undo

segments)

• Lorsqu'une opération d'insertion, de mise à jour ou de suppression est effectuée sur la base de

données, le serveur Oracle prend une copie des données avant qu'elles ne soient modifiées et l'écrit

dans un segment d'annulation.

• Read consistent image est construite à partir des données validées dans la table et des anciennes

valeurs des données qui sont modifiées et qui ne sont pas encore validées dans le segment

d'annulation.
Read Consistency

• Si la transaction est annulée, les changements sont annulés :

• La version originale, plus ancienne, des données du segment d'annulation est réinscrite

dans la table.

• Tous les utilisateurs voient la base de données telle qu'elle existait avant le début de la

transaction.
Clause FOR UPDATE dans une instruction SELECT

SELECT employee_id, salary, commission_pct, job_id


FROM employees
WHERE job_id = 'SA_REP'
FOR UPDATE
ORDER BY employee_id;

 Verrouille les lignes de la table EMPLOYEES ayant job_id égale à ‘SA_REP’.

 Le verrou n'est libéré une instruction ROLLBACK ou un COMMIT est émise.

 Si l'instruction SELECT tente de verrouiller une ligne qui est déjà verrouillée par un autre utilisateur, la

base de données attend que la ligne soit disponible, puis renvoie les résultats de l'instruction SELECT.
Clause FOR UPDATE avec WAIT

SELECT employee_id, salary, commission_pct, job_id


FROM employees
WHERE job_id = 'SA_REP'
FOR UPDATE WAIT 5
ORDER BY employee_id;

Dans cet ’exemple, la base de données va attendre que la ligne soit disponible juste pendant cinq

secondes , avant de vous rendre le contrôle après écoulement de cette période.


Clause FOR UPDATE (plusieurs tables )

SELECT e.employee_id, e.salary, e.commission_pct

FROM employees e JOIN departments d

USING (department_id)

WHERE job_id = 'ST_CLERK‘ AND location_id = 1500

FOR UPDATE

ORDER BY e.employee_id;

 FOR UPDATE peut être utilisée, dans une instruction SELECT avec plusieurs tables.

 Dans ce cas, les lignes des deux tables EMPLOYEES et DEPARTMENTS sont verrouillées.

 Utilisez FOR UPDATE OF COLUMN_NAME pour qualifier la colonne que vous avez l'intention de

modifier, alors seules les lignes de la table contenant la colonne sont verrouillées dans ce cas de

figure.
Récapitulatif

Fonction Description

INSERT Ajoute une nouvelle ligne à une table

UPDATE Modifie les lignes existantes dans une table

DELETE Supprime les lignes existantes dans une table

TRUNCATE Supprime toutes les lignes d’une table

COMMIT Rend permanentes toutes les modifications en cours

ROLLBACK Annule toutes les modifications de données en attente

SAVEPOINT Marque un point de sauvegarde SAVEPOINT (utilisé par ROLLBACK TO

SAVEPOINT pour restaurer l’état des données avant le marqueur )


FOR UPDATE Verrouille les lignes identifiées par la requête SELECT

Vous aimerez peut-être aussi