Vous êtes sur la page 1sur 6

TP7 SGBD

LES TRANSACTIONS en MS SQL


Au sens SGBD du terme, une transaction est un bloc d’instruction LMD (langage de
manipulation des données) qui sont des requêtes mise à jour, faisant passer la base de
données d’un état (cohérent) à un état intermédiaire ou final cohérent.
• PRINCIPE ACID
- Une transaction est une suite d’opération caractérisée par les propriétés d’atomicité -
de cohérence – d’isolation et de durabilité.
- Atomicité :
Une transaction doit être complétement exécutée. Sinon elle ne doit laisser aucune
trace de son exécution dans la base de données. L’atomicité obéit au principe du tout
ou rien.
- Cohérence :
Il est possible qu’une transaction en cours d’exécution transgresse temporairement
certaines contraintes de cohérence. Mais quand la transaction est terminée, le résultat
final doit respecter de nouveau toutes les contraintes. La cohérence signifie l’absence
de données contradictoires.
- Isolation :
Le principe de l’isolation exige que les résultats générés par des transactions
simultanées soient identiques à ceux qu’on aurait pu obtenir dans un environnement à
un seul utilisateur. L’isolation protégé la base de données contre les effets de bord.
- Durabilité :
Une base de données doit être maintenue dans un état cohérent jusqu’à la validation
des modifications effectuées par une transaction. La durabilité présuppose la possibilité
de reconstruire une base de données. Donc la durabilité permet de valider les
changements.
Les quatre concepts d’atomicité (atomicity), de cohérence (consistency), d’isolation
(isolation) et de durabilité (durability) définissent le principe ACID.
• Mécanisme d’une transaction
Le mécanisme transactionnel empêche tout scénario problématique par la technique
de :
- Journalisation.
- Et Celle des verrous.
La journalisation permet de conserver un journal de l’ensemble des lectures et écritures
afin de pouvoir reconstituer un système cohérent. Durant une transaction, SQL
enregistre chaque opération sur les données dans un fichier journal (ou log).

Prof Rachid OMARI


COMMIT ROLLBACK
Instruction SQL pour valider la Instruction SQL pour annuler la
transaction. transaction et récupérer la base de
données avant transaction.

• Différents niveaux de transaction


- Niveau 1 : READ UNCOMMITED. Lecture de données non validées en cours de
transaction. C’est le niveau faible.
- Niveau 2 : READ COMMITED. Modification des données possible en cours de
transaction.
- Niveau 3 : REPEATABLE READ. Insertion de nouveaux enregistrements possible en cours
de transaction.
- Niveau 4 : SERIALIZABLE. Toutes les transactions sont traitées en série. C’est le niveau le
plus sûr.

• Syntaxe SQL des transactions


BEGIN transaction
Liste des instructions SQL LMD
………..
COMMIT ou ROLLBACK
Exemple 1 :
Use film
---demarage de la transaction---
BEGIN transaction

---Destruction des tuples dont le champ ‘nom’ vaut dans la table personne

delete from personne where nom ='jalil'

----validation des modifications faites depuis BEGIN TRANSACTION


COMMIT;
EXEMPLE 2 :
use film

On suppose que la table personne a une clé primaire, donc on va la


supprimer et on la créera à nouveau.

DROP TABLE personne

Prof Rachid OMARI


CREATE TABLE PERSONNE,
(
Idpers int primary key,
Nom varchar(20),
Prenom varchar(20)
) ;

Insert into personne values (01,'dahani','youssef'),


(02,'nail','med'),
(03,'jalil','ali'),
(04,'benali','mastafa') ;

select * from personne

Maintenant on exécute la transaction suivante :


begin tran tr1
begin try
insert into personne values (3, 'alawi', 'anas')
commit tran tr1
end try
begin catch
print 'erreur_message'
rollback tran tr1
end catch

Aussi la transaction suivante:

begin tran tr1


begin try
insert into personne values (5, 'dinari', 'adnan')
commit tran tr1
end try
begin catch
print 'erreur_message'
rollback tran tr1
end catch

• Quand la transaction peut exister le système pointe sur try pour valider l’opération. Par
conséquent il exécute le commit.
• Et quand la transaction ne peut pas exister le système pointe sur catch pour annuler
l’opération. Par conséquent il donne le message d’erreur. Et en fin il exécute le rollback.

EXEMPLE 3
begin tran
Prof Rachid OMARI
begin try
delete from film where genre = 'historique'
print 'rien à supprimer'
commit tran
end try
begin catch
rollback tran
end catch
Et pour afficher seulement le message on utilise : SET NOCOUNT ON
set nocount on
begin tran
begin try
delete from film where genre = 'historique'
print 'rien à supprimer'
commit tran
end try
begin catch
rollback tran
end catch

Exemple 4
Use AIRBASSE

Soit la transaction suivante :

begin tran
begin try
delete from pilot where namep = 'mourad'
print 'aucun nom ne correspond pour mourad'
commit tran
end try
begin catch
rollback tran
end catch

Exemple 5

use service_achat

select * from livraison

select * from FOURNISSEUR

Prof Rachid OMARI


begin tran tr1
begin try
delete from livraison where numfou=2
delete from FOURNISSEUR where numfou=1
commit tran
end try
begin catch
print 'impossible de faire la suppression, annulation'
rollback tran
end catch

Si on veut afficher le message fait par la transaction, on ajoute « set nocount on » au début de
notre programme de la transaction.

set nocount on
begin tran tr1
begin try
delete from livraison where numfou=2
delete from FOURNISSEUR where numfou=1
commit tran
end try
begin catch
print 'impossible de faire la suppression, annulation'
rollback tran
end catch

remarque :
begin tran
select * from film
delete from film where idfilm=1
select * from film
rollback tran
On remarque que si on n’a pas fait commit, on n’aura pas la suppression définitive.
select * from film
si on veut vraiment faire une suppression, il faut entrer commit :
begin tran
select * from film
delete from film where idfilm=1
select * from film
Prof Rachid OMARI
commit tran
Donc une transaction est un ensemble d’action qui doivent soit s’exécuter tous, soit aucune.
-démarrage par begin transaction.
- finalisation par Commit ou Rollback.

Prof Rachid OMARI

Vous aimerez peut-être aussi