0% ont trouvé ce document utile (0 vote)
11 vues14 pages

NoSQL vs SGBDR : Comparaison Essentielle

Le document compare les bases de données NoSQL et SGBDR en termes de modèle de données, schéma, scalabilité, performances, langage de requête et transactions. Il explique que les SGBDR sont idéaux pour des applications nécessitant une forte intégrité des données, tandis que NoSQL est mieux adapté pour des applications modernes avec des besoins de scalabilité massive et de gestion de données non structurées. Le document aborde également la standardisation du SQL par l'ANSI et les dialectes SQL spécifiques à chaque SGBD.

Transféré par

cherif15044
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
11 vues14 pages

NoSQL vs SGBDR : Comparaison Essentielle

Le document compare les bases de données NoSQL et SGBDR en termes de modèle de données, schéma, scalabilité, performances, langage de requête et transactions. Il explique que les SGBDR sont idéaux pour des applications nécessitant une forte intégrité des données, tandis que NoSQL est mieux adapté pour des applications modernes avec des besoins de scalabilité massive et de gestion de données non structurées. Le document aborde également la standardisation du SQL par l'ANSI et les dialectes SQL spécifiques à chaque SGBD.

Transféré par

cherif15044
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

@KaraSAMB

Un petit mot sur les bases NoSQL par rapport à un


SGBDR
1. Modèle de données

 SGBDR : Utilisent un modèle relationnel basé sur des tables (colonnes et lignes). Les
relations entre les données sont définies par des clés étrangères et des contraintes
strictes. Le langage de requête standard est le SQL.
 NoSQL : Utilisent divers modèles de données, tels que les documents (JSON, BSON),
les colonnes (type Cassandra), les clés-valeurs, ou les graphes. Ce modèle est souvent
plus flexible pour stocker des données non structurées ou semi-structurées.

2. Schéma

 SGBDR : Ont un schéma rigide et défini à l'avance (schéma fort), ce qui nécessite de
bien planifier la structure avant de commencer à insérer des données.
 NoSQL : Schéma flexible (schéma faible), ce qui permet de modifier facilement la
structure des données en fonction des besoins évolutifs sans devoir redéfinir un schéma
strict.

3. Scalabilité

 SGBDR : Principalement scalables verticalement, c'est-à-dire en ajoutant plus de


ressources (CPU, mémoire, etc.) à un serveur unique.
 NoSQL : Scalables horizontalement, c'est-à-dire en ajoutant plus de serveurs pour
répartir la charge. Cela permet une meilleure gestion des grands volumes de données
distribuées sur plusieurs nœuds.

4. Performances et cas d'utilisation

 SGBDR : Conviennent bien aux applications qui nécessitent une forte intégrité des
données, des relations complexes, et des transactions ACID (Atomicité, Cohérence,
Isolation, Durabilité). Ils sont idéaux pour les systèmes où les données sont fortement
liées (banques, ERP, etc.).
 NoSQL : Mieux adaptés aux applications nécessitant une haute disponibilité, des
performances élevées et des volumes massifs de données non structurées (réseaux
sociaux, big data, IoT). Les bases NoSQL privilégient souvent la disponibilité et la
partition des données (selon le théorème CAP), au détriment d'une cohérence
immédiate.

5. Langage de requête

 SGBDR : Utilisent le SQL (Structured Query Language) pour manipuler et interroger


les données. Ce langage est standardisé et mature.
 NoSQL : N'ont souvent pas de langage de requête standardisé, chaque type de base de
données NoSQL ayant son propre langage ou API (MongoDB utilise un format JSON
pour les requêtes, Cassandra a son propre langage CQL, etc.).

1
@KaraSAMB

6. Transactions

 SGBDR : Supportent les transactions complexes avec des garanties fortes d'intégrité via
les propriétés ACID.
 NoSQL : Certaines bases de données NoSQL supportent les transactions, mais souvent
avec des limitations ou une implémentation partielle. Elles favorisent généralement la
performance et la scalabilité au détriment de la complexité transactionnelle.

7. Exemples de bases

 SGBDR : MySQL, PostgreSQL, Oracle, Microsoft SQL Server.


 NoSQL : MongoDB (document), Cassandra (colonnes), Redis (clé-valeur), Neo4j
(graphes).

Quand choisir l’un ou l’autre ?

 SGBDR : Idéal pour les applications traditionnelles avec des données structurées et des
relations complexes nécessitant des transactions fiables et une intégrité forte.
 NoSQL : Préféré pour les applications modernes nécessitant une scalabilité massive, la
gestion de données non structurées ou une disponibilité élevée.

Aperçu des possibilités du langage SQL (select, insert, update, delete)


Le langage SQL (Structured Query Language) est un langage de programmation utilisé pour
gérer et manipuler des bases de données relationnelles. Il est principalement utilisé pour
interagir avec des données en exécutant des commandes pour récupérer, insérer, mettre à jour
et supprimer des données.

1. SELECT : Récupérer des données

La commande SELECT permet de récupérer des données à partir d'une ou plusieurs tables dans
une base de données.

Syntaxe de base :

SELECT colonne1, colonne2, ...


FROM table
WHERE condition;

 Exemple : Récupérer tous les utilisateurs avec un âge supérieur à 30 ans.

SELECT nom, prenom, age


FROM etudiant
WHERE age > 30;

 Autres fonctionnalités courantes :


o JOIN : Récupérer des données à partir de plusieurs tables en utilisant une
relation.

2
@KaraSAMB

SELECT [Link], o.commande_id


FROM etudiant e
JOIN commandes o ON [Link] = o.utilisateur_id;

o GROUP BY : Agréger des données selon certaines colonnes.

SELECT categorie, COUNT(*)


FROM produits
GROUP BY categorie;

o ORDER BY : Trier les résultats par une colonne spécifique.

SELECT nom, salaire


FROM employes
ORDER BY salaire DESC;

2. INSERT : Ajouter des données

La commande INSERT permet d’ajouter de nouvelles lignes dans une table.

Syntaxe de base :

INSERT INTO table (colonne1, colonne2, ...)


VALUES (valeur1, valeur2, ...);

 Exemple : Ajouter un nouvel utilisateur.

INSERT INTO etudiant(nom, prenom, age)


VALUES ('Samb', 'Awa', 35);

 Ajout multiple de lignes :

INSERT INTO produits (nom, prix)


VALUES ('Produit A', 100),
('Produit B', 200),
('Produit C', 300);

3. UPDATE : Modifier des données

La commande UPDATE permet de modifier des données existantes dans une table.

Syntaxe de base :

UPDATE table
SET colonne1 = valeur1, colonne2 = valeur2, ...
WHERE condition;

 Exemple : Mettre à jour le salaire d'un employé.

UPDATE employes
SET salaire = 50000
WHERE id = 3;

3
@KaraSAMB

 Note : Il est crucial d’utiliser la clause WHERE pour éviter de mettre à jour toutes les
lignes de la table par erreur.

4. DELETE : Supprimer des données

La commande DELETE permet de supprimer des lignes dans une table.

Syntaxe de base :

DELETE FROM table


WHERE condition;

 Exemple : Supprimer un utilisateur avec un ID spécifique.

DELETE FROM utilisateurs


WHERE id = 5;

 Attention : Comme pour UPDATE, il est important d'utiliser la clause WHERE pour éviter
de supprimer toutes les lignes d'une table.

5. Clauses courantes associées

 WHERE : Appliquer une condition pour filtrer les résultats ou les lignes affectées.

SELECT * FROM produits WHERE prix > 100;

 LIMIT : Limiter le nombre de résultats retournés.

SELECT * FROM commandes LIMIT 10;

 DISTINCT : Éviter les doublons dans les résultats.

SELECT DISTINCT categorie FROM produits;

 LIKE : Recherche de modèles de chaînes.

SELECT nom FROM etudiants WHERE nom LIKE 'Sa%'; -- Noms commençant par
"Sa"

 IN : Filtrer par une liste de valeurs spécifiques.

SELECT * FROM produits WHERE id IN (1, 2, 3);

 BETWEEN : Filtrer entre deux valeurs.

SELECT * FROM produits WHERE prix BETWEEN 100 AND 200;

 AND/OR : Combiner des conditions multiples.

SELECT * FROM etudiant WHERE age > 30 AND ville = 'Thies';

6. Transactions et gestion des erreurs


4
@KaraSAMB

 BEGIN TRANSACTION : Commencer une transaction pour exécuter plusieurs


commandes comme un ensemble atomique.

BEGIN TRANSACTION;
UPDATE comptes SET solde = solde - 500 WHERE id = 1;
UPDATE comptes SET solde = solde + 500 WHERE id = 2;
COMMIT;

 ROLLBACK : Annuler une transaction en cas d'erreur avant le COMMIT.

ROLLBACK;

Syntaxe générale de la création de table


CREATE TABLE nom_table (
nom_colonne1 TYPE_DONNEES [CONTRAINTE],
nom_colonne2 TYPE_DONNEES [CONTRAINTE],
...
nom_colonneN TYPE_DONNEES [CONTRAINTE]
);

Exemple concret : création d'une table Employés

Dans cet exemple, on va créer une table Employés avec plusieurs colonnes comme l'identifiant
de l'employé, son nom, son prénom, son âge, sa date d'embauche, et son salaire.

CREATE TABLE Employés (


ID INT PRIMARY KEY, -- Identifiant unique pour chaque employé
Nom VARCHAR(50) NOT NULL, -- Nom de l'employé, champ obligatoire
Prénom VARCHAR(50) NOT NULL, -- Prénom de l'employé, champ obligatoire
Âge INT CHECK (Âge >= 18), -- L'âge doit être un entier et supérieur
ou égal à 18
Date_Embauche DATE, -- La date d'embauche
Salaire DECIMAL(10, 2) DEFAULT 30000 -- Le salaire, avec une valeur
par défaut
);

Insérer des données dans la table Employés

Une fois la table créée, vous pouvez insérer des données à l'aide de la commande INSERT INTO
:

INSERT INTO Employés (ID, Nom, Prénom, Âge, Date_Embauche, Salaire)


VALUES (1, 'Souare', 'Mass', 35, '2019-02-15', 35000),
(2, 'Lo', 'Sophie', 29, '2020-06-01', 42000);

Requêtes simples sur la table

 Sélectionner tous les employés :

SELECT * FROM Employés;

5
@KaraSAMB

 Mettre à jour le salaire d'un employé :

UPDATE Employés
SET Salaire = 45000
WHERE ID = 2;

 Supprimer un employé :

DELETE FROM Employés


WHERE ID = 1;

Standardisation du SQL par l’ANSI

La standardisation du SQL par l'ANSI (American National Standards Institute) vise à établir
des normes universelles pour l'utilisation du SQL dans les systèmes de gestion de bases de
données relationnelles (SGBDR). SQL a été conçu à l'origine par IBM dans les années 1970
pour interagir avec les bases de données relationnelles, et il a été standardisé pour assurer une
compatibilité et une interopérabilité entre les différents SGBDR.

1. Introduction de la norme SQL

En 1986, l'ANSI a standardisé SQL sous le nom de SQL-86 (aussi appelé SQL-1). Cette
première norme a fourni une base commune pour l'interaction avec les bases de données
relationnelles, en définissant des instructions de base telles que SELECT, INSERT, UPDATE et
DELETE. L'ISO (International Organization for Standardization) a adopté cette norme un an plus
tard, en 1987.

2. Évolutions de la norme SQL

Depuis sa création, SQL a évolué à travers plusieurs versions standardisées par l'ANSI et l'ISO,
chacune apportant de nouvelles fonctionnalités pour s'adapter aux exigences modernes des
bases de données.

Les principales révisions incluent :

 SQL-89 : Version améliorée avec des corrections mineures de bugs par rapport à SQL-
86. Elle est aussi connue sous le nom de SQL-1.1.
 SQL-92 : Version majeure avec l'introduction de nombreuses nouvelles fonctionnalités.
Elle a permis une meilleure interopérabilité entre les systèmes de bases de données et
introduit des concepts tels que les sous-requêtes imbriquées, les jointures externes
(OUTER JOIN), et les expressions de valeurs de table.

Exemple d'amélioration en SQL-92 :

SELECT nom, prenom


FROM employes
WHERE age > 30
ORDER BY nom DESC;

 SQL:1999 (SQL3) : Cette version a introduit des concepts avancés, notamment :

6
@KaraSAMB

o Le support des types de données abstraits (programmation orientée objet).


o Les expressions de table communes (CTE).
o Les déclencheurs (triggers).
o Les méthodes de gestion des transactions avancées comme les niveaux d’isolation et
la gestion des transactions à plusieurs phases.
 SQL:2003 : Introduction des fonctionnalités de XML, du support des fenêtres
analytiques (fonctions de fenêtre), et de nouveaux types de données comme les BIGINT.

Exemple de fonction de fenêtre (window function) :

SELECT nom, prenom, salaire,


RANK() OVER (ORDER BY salaire DESC) AS rang_salaire
FROM employes;

 SQL:2006 : Extension de la prise en charge du XML, avec des améliorations dans la


manipulation des données au format XML.
 SQL:2008 : Ajout de fonctionnalités comme les tables temporaires générées, et l’ajout
de nouveaux types de données comme DATE, TIME, TIMESTAMP, ainsi que des fonctions
pour la gestion des objets LOB (Large Object Binary).
 SQL:2011 : Ajout du support pour la gestion des données temporelles, permettant de
travailler sur des versions des données historiques via des concepts comme les tables à
temps transactionnel (pour l'audit et la gestion des versions).
 SQL:2016 : Renforcement de l'intégration avec JSON (JavaScript Object Notation),
permettant de manipuler des données semi-structurées dans des bases de données
relationnelles.

Exemple d'utilisation de JSON en SQL :

SELECT json_value(donnees, '$.nom') AS nom


FROM utilisateurs
WHERE json_value(donnees, '$.age') > 30;

 SQL:2019 : La version la plus récente au moment d'octobre 2023, cette version a


renforcé la prise en charge des requêtes analytiques et du traitement massif des données
avec des améliorations supplémentaires dans les expressions de table communes et les
types de données JSON.

3. Objectifs de la standardisation du SQL

La standardisation de SQL par l'ANSI a plusieurs objectifs clés :

 Interopérabilité : Assurer que le SQL fonctionne de manière uniforme à travers


différents SGBDR (par exemple, Oracle, MySQL, PostgreSQL, SQL Server, etc.). Bien
que chaque système ait ses extensions propriétaires, le noyau SQL standardisé permet
de garantir une compatibilité de base.
 Portabilité : Permettre aux développeurs d'écrire du code SQL qui peut être exécuté
avec peu ou pas de modifications sur plusieurs systèmes.
 Normalisation des fonctionnalités : Garantir que les nouvelles fonctionnalités du
langage SQL, telles que les types de données, les expressions conditionnelles, et les
fonctions d'agrégation, suivent un cadre cohérent pour être implémentées de manière
uniforme.

7
@KaraSAMB

4. Limitations et extensions propriétaires

Bien que SQL soit standardisé, de nombreux fournisseurs de bases de données ajoutent leurs
propres extensions propriétaires pour offrir des fonctionnalités spécifiques à leurs systèmes.
Cela crée parfois des problèmes de portabilité entre différentes bases de données.

Exemples d'extensions propriétaires :

 PL/SQL d’Oracle : Un langage procédural spécifique à Oracle qui ajoute des boucles, des
conditions, et des fonctionnalités avancées au SQL standard.
 T-SQL de Microsoft SQL Server : Ajoute des commandes spécifiques à SQL Server pour la
gestion des transactions et des fonctionnalités spécifiques.

Conclusion

La standardisation du SQL par l'ANSI et l'ISO a joué un rôle essentiel pour assurer la cohérence,
l'interopérabilité et la portabilité entre les différents systèmes de gestion de bases de données.
Bien que les systèmes de bases de données puissent ajouter leurs propres extensions, les
fondamentaux du SQL restent universels grâce à cette normalisation, facilitant le
développement et la gestion des bases de données relationnelles dans divers environnements.

Les dialectes SQL

Les dialectes SQL sont des variantes ou des extensions du langage SQL standard, développées
par différents systèmes de gestion de bases de données (SGBD). Bien que la base du SQL soit
standardisée par l'ANSI et l'ISO, chaque SGBD intègre ses propres extensions, optimisations et
syntaxes spécifiques pour répondre à des besoins particuliers ou offrir des fonctionnalités
avancées. Ces différences peuvent entraîner des variations dans la manière d’écrire des requêtes
ou d’interagir avec les bases de données en fonction du système utilisé.

 Aperçu des dialectes SQL les plus courants et de leurs spécificités :

1. T-SQL (Transact-SQL) - Microsoft SQL Server

T-SQL est le dialecte SQL utilisé par Microsoft SQL Server et Sybase. Il inclut toutes les
fonctionnalités de SQL standard tout en ajoutant des extensions procédurales qui permettent
d'écrire des scripts plus complexes.

 Fonctionnalités spécifiques :
o Prise en charge des procédures stockées, déclencheurs et fonctions définies par
l'utilisateur (UDF).
o Contrôle des flux avec des constructions telles que IF, WHILE, BEGIN, et END,
permettant d'écrire du code procédural à l'intérieur des scripts SQL.
o Gestion avancée des transactions avec des commandes comme BEGIN
TRANSACTION, COMMIT, et ROLLBACK.
o Erreurs et gestion des exceptions avec TRY...CATCH.

8
@KaraSAMB

Exemple T-SQL :

BEGIN TRY
BEGIN TRANSACTION;
UPDATE comptes SET solde = solde - 100 WHERE id = 1;
UPDATE comptes SET solde = solde + 100 WHERE id = 2;
COMMIT;
END TRY
BEGIN CATCH
ROLLBACK;
PRINT 'Une erreur est survenue.';
END CATCH;

2. PL/SQL (Procedural Language/SQL) - Oracle

PL/SQL est le dialecte SQL développé par Oracle. Il ajoute des capacités procédurales au
langage SQL, ce qui en fait un langage de programmation complet utilisé pour écrire des
procédures stockées, des déclencheurs et des fonctions.

 Fonctionnalités spécifiques :
o Prise en charge des boucles (FOR, WHILE, LOOP), des conditions (IF, CASE).
o Gestion des paquets (collections de procédures et fonctions liées).
o Gestion avancée des curseurs pour parcourir les ensembles de résultats.
o Déclencheurs sur les événements de table ou de vue.

Exemple PL/SQL :

DECLARE
v_solde [Link]%TYPE;
BEGIN
SELECT solde INTO v_solde FROM comptes WHERE id = 1;
IF v_solde > 100 THEN
UPDATE comptes SET solde = solde - 100 WHERE id = 1;
END IF;
END;

3. PostgreSQL (Postgres)

PostgreSQL est un SGBD open-source qui se distingue par sa conformité avec les standards
SQL, tout en offrant des fonctionnalités avancées et un riche jeu d'extensions. Son dialecte SQL
supporte également des fonctionnalités comme le PL/pgSQL, une variante procédurale
similaire à PL/SQL d'Oracle.

 Fonctionnalités spécifiques :
o Fonctions et procédures définies par l'utilisateur.
o Prise en charge des types de données complexes et personnalisés, y compris les
tableaux, les types JSON, les types hstore (pour les paires clé-valeur), et plus.
o Gestion des expressions régulières dans les requêtes SQL.
o Support natif des requêtes JSON (par exemple jsonb).

Exemple PostgreSQL :

SELECT nom, data->>'age' AS age


FROM utilisateurs

9
@KaraSAMB

WHERE data->>'ville' = 'Paris';

Fonctionnalités PL/pgSQL :

DO $$
BEGIN
FOR r IN SELECT * FROM employes LOOP
RAISE NOTICE 'Employé: %', [Link];
END LOOP;
END $$;

4. MySQL

MySQL est un SGBD très populaire, notamment pour les applications web. Son dialecte SQL
est largement utilisé, avec des fonctionnalités étendues pour gérer les transactions et les
procédures stockées, bien que certaines fonctionnalités avancées présentes dans d'autres SGBD
puissent être limitées ou différentes.

 Fonctionnalités spécifiques :
o Support des transactions avec les moteurs de stockage comme InnoDB (via BEGIN,
COMMIT, ROLLBACK).
o Procédures stockées et fonctions pour encapsuler les opérations réutilisables.
o Triggers (déclencheurs) pour des actions automatisées lors des événements INSERT,
UPDATE ou DELETE.
o Prise en charge des vues, index, et des clés étrangères.

Exemple MySQL :

DELIMITER $$
CREATE PROCEDURE AjouterEmploye(nom VARCHAR(50), prenom VARCHAR(50),
salaire DECIMAL(10, 2))
BEGIN
INSERT INTO employes (nom, prenom, salaire) VALUES (nom, prenom,
salaire);
END$$
DELIMITER ;

5. SQLite

SQLite est un SGBD léger, souvent utilisé dans les applications embarquées ou les
environnements de faible charge. Son dialecte SQL est conforme à une grande partie du
standard SQL, mais il manque certaines fonctionnalités avancées telles que la gestion des
transactions complexes ou les procédures stockées.

 Fonctionnalités spécifiques :
o Fonctions intégrées pour les opérations de chaîne, date et heure, mais pas de support
natif pour les procédures stockées.
o Transactions simplifiées avec BEGIN, COMMIT, et ROLLBACK.
o Prise en charge des vues, mais pas des déclencheurs complexes.

Exemple SQLite :

10
@KaraSAMB

INSERT INTO utilisateurs (nom, age) VALUES ('Der', 25);

6. PL/pgSQL (PostgreSQL)

Comme mentionné ci-dessus, PostgreSQL a son propre dialecte avec une approche très
conforme au standard SQL tout en étant extensible. Il se distingue par des capacités
procédurales comme PL/pgSQL, ainsi que le support natif des types complexes et des
opérations JSON.

7. MariaDB

MariaDB est un dérivé de MySQL et partage la plupart des fonctionnalités de MySQL tout en
introduisant ses propres extensions et optimisations. Bien que le dialecte de base reste très
similaire à celui de MySQL, certaines différences apparaissent avec des fonctionnalités comme
les moteurs de stockage spécifiques ou des fonctionnalités améliorées de performance.

8. Dialectes spécifiques NoSQL (avec SQL-like)

Certains systèmes NoSQL, bien qu'ils ne soient pas purement relationnels, offrent des dialectes
proches du SQL pour manipuler les données dans un format compréhensible pour les
développeurs SQL :

 CQL (Cassandra Query Language) dans Apache Cassandra.


 N1QL pour Couchbase.
 SQL++ pour les bases orientées JSON.

Utilisateurs et droits
1. Utilisateurs et droits (GRANT, REVOKE)

Les bases de données relationnelles permettent de définir des utilisateurs ayant des droits
spécifiques pour accéder ou manipuler les données. Ces droits sont gérés principalement via les
commandes GRANT et REVOKE.

GRANT : Attribution des droits

La commande GRANT permet d'attribuer des droits à un utilisateur ou à un rôle pour une base de
données ou pour des tables, colonnes, vues spécifiques. Ces droits peuvent inclure des
permissions comme la lecture, l'insertion, la mise à jour, la suppression, ou l'exécution de
procédures stockées.

Syntaxe de base :

GRANT droit1, droit2, ... ON ressource TO utilisateur;

 Exemple : Accorder à un utilisateur nommé Kara les droits de sélection et d'insertion sur la
table produits.

11
@KaraSAMB

GRANT SELECT, INSERT ON produits TO Kara;

Les droits peuvent être attribués à des rôles qui sont ensuite assignés aux utilisateurs pour une
gestion centralisée.

REVOKE : Révocation des droits

La commande REVOKE permet de retirer les droits précédemment accordés à un utilisateur ou à


un rôle.

Syntaxe de base :

REVOKE droit1, droit2, ... ON ressource FROM utilisateur;

 Exemple : Révoquer le droit d'insertion de Kara sur la table produits.

REVOKE INSERT ON produits FROM kara;


Types de droits courants :

 SELECT : Lire les données d'une table.


 INSERT : Ajouter des données dans une table.
 UPDATE : Modifier les données dans une table.
 DELETE : Supprimer des données dans une table.
 EXECUTE : Exécuter des procédures stockées.
 ALL PRIVILEGES : Accorder tous les privilèges disponibles sur une ressource.

2. Notions de transactions (ACID)

Les transactions permettent d'exécuter un ensemble d'opérations SQL de manière atomique,


c'est-à-dire qu'elles sont considérées comme une seule unité de travail. Les bases de données
suivent les propriétés ACID pour garantir l'intégrité des données lors des transactions.

ACID : Qu'est-ce que cela signifie ?

1. Atomicité :
o Toutes les opérations d'une transaction sont traitées comme une seule unité. Si une
partie échoue, toute la transaction est annulée (aucune modification n'est appliquée
partiellement).
o Exemple : Lors d'un virement bancaire, soit les fonds sont transférés entièrement d'un
compte à l'autre, soit aucune action n'est prise si une erreur se produit.
2. Cohérence :
o Une transaction doit amener la base de données d'un état cohérent à un autre état
cohérent, en respectant toutes les règles d'intégrité.
o Exemple : Après une transaction, toutes les contraintes d'intégrité (comme les clés
primaires ou étrangères) doivent être respectées.
3. Isolation :
o Les modifications d'une transaction doivent être invisibles pour les autres transactions
jusqu'à ce que la transaction soit validée (COMMIT).
o Exemple : Si deux transactions tentent de mettre à jour la même donnée, l'isolation
assure qu'elles ne se perturbent pas mutuellement.
4. Durabilité :

12
@KaraSAMB

o Une fois qu'une transaction est validée (COMMIT), les modifications apportées à la base
de données persistent même en cas de panne.
o Exemple : Après un crash système, les modifications d'une transaction validée restent
intactes.

3. Accès concurrents et verrous (commit, rollback)

Dans les bases de données multi-utilisateurs, plusieurs transactions peuvent essayer de lire ou
écrire les mêmes données simultanément. Cela peut entraîner des problèmes de concurrence.
Les bases de données utilisent des verrous pour gérer ces accès concurrents de manière
cohérente.

Commit et rollback

 COMMIT : Valide les modifications d'une transaction et les rend visibles pour les
autres utilisateurs.

COMMIT;

 ROLLBACK : Annule toutes les modifications faites dans une transaction et restaure
l'état précédent de la base de données.

ROLLBACK;

 SAVEPOINT : Crée un point de restauration dans une transaction, permettant de faire


un retour partiel à cet état sans annuler toute la transaction.

SAVEPOINT savepoint_name;
ROLLBACK TO savepoint_name;
Verrous (Locks)

Les verrous sont utilisés pour empêcher des transactions concurrentes d'entrer en conflit
lorsqu'elles accèdent ou modifient des données. Il existe deux principaux types de verrous :

 Verrous partagés (Shared Locks) :


o Ils permettent à plusieurs transactions de lire une donnée, mais empêchent toute
modification pendant qu'un verrou partagé est actif.
o Utilisé dans les requêtes SELECT pour éviter que les données lues soient modifiées par
une autre transaction avant validation.
 Verrous exclusifs (Exclusive Locks) :
o Empêchent toute autre transaction d'accéder à la donnée verrouillée (ni lecture ni
écriture).
o Utilisé dans les requêtes INSERT, UPDATE, DELETE pour empêcher d'autres
transactions d'interférer jusqu'à ce que la transaction en cours soit validée ou annulée.

Problèmes d'accès concurrent :

1. Dirty Read : Lire des données non validées par une autre transaction.
o Solution : Utiliser des niveaux d'isolation stricts (comme READ COMMITTED ou
SERIALIZABLE) pour empêcher cela.

13
@KaraSAMB

2. Non-repeatable Read : Lire une donnée plusieurs fois dans la même transaction, mais
constater que la valeur a changé à cause d'une autre transaction.
o Solution : Utiliser le niveau d'isolation REPEATABLE READ ou supérieur.
3. Phantom Read : Lors d'une transaction, une requête retourne un ensemble de lignes,
mais une autre transaction insère ou modifie des lignes dans le même intervalle,
modifiant les résultats lors d'une future requête dans la même transaction.
o Solution : Utiliser le niveau d'isolation SERIALIZABLE.

Niveaux d'isolation des transactions :

Les niveaux d'isolation définissent dans quelle mesure les modifications des transactions en
cours sont visibles pour les autres transactions.

 READ UNCOMMITTED : Permet la lecture des données non validées (dirty reads).
 READ COMMITTED : Les données sont visibles uniquement après validation.
 REPEATABLE READ : Empêche la modification des lignes lues par une transaction, mais permet
les phantom reads.
 SERIALIZABLE : Le niveau le plus strict, où chaque transaction s'exécute comme si elle était la
seule à être active, empêchant les phantom reads.

14

Vous aimerez peut-être aussi