Fondamentaux des Bases de Données
L'utilisation d'un système de gestion de base de données (SGBD) repose sur trois piliers principaux :
- Persistence des informations : Assurer que les données sont conservées de manière durable sur un support physique.
- Efficacité des rceherches : L'utilisation du langage SQL permet d'extraire des informations complexes avec une grande rapidité.
- Structure et administration : Faciliter la maintenance et l'organisation logique de volumes importants de données.
Le SQL (Structured Query Language) est le langage standard utilisé pour interagir avec les bases de données relationnelles. Il permet d'effectuer des opérations de lecture, d'insertion, de mise à jour et de suppression (CRUD), ainsi que de gérer la structure même de la base.
Gestion des Interblocages (Deadlocks)
Un interblocage survient lorsque deux transactions ou plus se bloquent mutuellement en détenant des verrous sur des ressources dont l'autre a besoin. Cela crée un cycle d'attente infini.
Pour prévenir ou résoudre les deadlocks, plusieurs stratégies sont envisageables :
- Ordre d'accès constant : Faire en sorte que tous les processus accèdent aux tables dans le même ordre chronologique.
- Verrouillage atomique : Tenter de verrouiller toutes les ressources nécessaires dès le début d'une transaction.
- Granularité du verrouillage : Si les conflits sont fréquents, augmenter le niveau de verrouillage (passer d'un verrou de ligne à un verrou de table).
- Approches logicielles : Implémenter des verrous optimistes ou des mécanismes de verrouillage distribué pour gérer la concurrence.
Manipulation de données avec DML
Les commandes de manipulation de données permettent de modifier l'état des tables.
-- Mise à jour d'un enregistrement spécifique
UPDATE commandes SET montant_total = 7500 WHERE id_commande = 12;
-- Suppression d'une entrée selon un critère
DELETE FROM logs_activite WHERE id_log = 105;
-- Insertion de nouvelles données
INSERT INTO utilisateurs (nom, email, role) VALUES ('Jean Dupont', 'j.dupont@example.com', 'admin');
Interrogation de données avec DQL
L'extraction de données peut être affinée par des fonctions d'agrégation et des sous-requêtes.
Pagination et sélection partielle :
-- Récupérer 3 enregistrements à partir du deuxième (index 1)
SELECT * FROM inventaire LIMIT 3 OFFSET 1;
Agrégations et calculs :
-- Moyenne des scores pour un module spécifique
SELECT AVG(resultat) FROM examens WHERE module_nom = 'Algorithmique';
-- Valeurs extrêmes
SELECT MAX(salaire), MIN(salaire) FROM employes WHERE departement = 'R&D';
Tri et filtres complexes :
-- Tri décroissant par date
SELECT * FROM factures WHERE statut = 'payé' ORDER BY date_paiement DESC;
-- Utilisation de sous-requêtes pour filtrer
SELECT * FROM clients WHERE id_client IN (
SELECT id_client FROM commandes WHERE montant > 1000
);
Groupement de données (GROUP BY vs ORDER BY)
Bien que souvent confondus, ces deux opérateurs ont des rôles distincts :
- ORDER BY : Utilisé pour organiser l'affichage des résultats (croissant ou décroissant).
- GROUP BY : Utilisé pour segmenter les données en groupes afin d'appliquer des fonctions d'agrégation (SOMME, MOYENNE, etc.).
Lorsqu'ils sont utilisés ensemble, le GROUP BY doit impérativement précéder le ORDER BY.
-- Exemple de calcul de revenus par catégorie de produit
SELECT categorie, SUM(prix_vente) AS total_ventes
FROM catalogue_produits
GROUP BY categorie
ORDER BY total_ventes DESC;
Les Jointures SQL
Les jointures permettent de lier plusieurs tables entre elles via des colonnes communes (souvent des clés étrangères).
1. Jointure Interne (INNER JOIN)
Retourne uniquement les lignes qui ont une correspondance dans les deux tables.
SELECT p.nom_produit, f.nom_fournisseur
FROM produits p
INNER JOIN fournisseurs f ON p.id_fournisseur = f.id_fournisseur;
2. Jointure Gauche (LEFT JOIN)
Retourne toutes les lignes de la table de gauche, même s'il n'y a pas de correspondance dans la table de droite. Les colonnes manquantes seront remplies par des valeurs NULL.
SELECT u.nom_utilisateur, c.date_commande
FROM utilisateurs u
LEFT JOIN commandes c ON u.id_utilisateur = c.id_utilisateur;
3. Jointure Droite (RIGHT JOIN)
Retourne toutes les lignes de la table de droite, avec les correspondances de la table de gauche si elles existent.
SELECT m.titre_mission, e.nom_employe
FROM missions m
RIGHT JOIN employes e ON m.id_responsable = e.id_employe;
Utilisation des Curseurs
Un curseur est une structure de contrôle qui permet de parcourir un jeu de résultats ligne par ligne. Contrairement aux opérations SQL classiques qui traitent des ensembles de données (set-based), le curseur permet un traitement itératif, utile dans les procédures stockées complexes où chaque enregistrement nécessite une logique spécifique.