MySQL est un système de gestion de bases de données relationnelles populaire, largement utilisé pour stocker, récupérer et gérer des données. Les opérations de requête constituent le cœur des interactions avec les bases de données, principalement réalisées via le langage SQL (Structured Query Language). Voici les points essentiels de la syntaxe des requêtes MySQL :
- Requête de base:
L'instruction SELECT permet de récupérer des données d'une ou plusieurs tables. Exemple : SELECT prenom, nom FROM utilisateurs;On peut utiliser * pour sélectionner toutes les colonnes : SELECT * FROM produits;
- Filtrage des conditions:
La clause WHERE sert à limiter les lignes sélectionnées selon des conditions spécifiques. Supporte les opérateurs de comparaison comme =, <, >, <=, >=, et les opérateurs de différence comme <> ou '!='. Exemple : SELECT * FROM commandes WHERE montant > 100;
- Opérateurs logiques: Les opérateurs logiques comme ET, OU, NON permettent de combiner plusieurs conditions :
SELECT *
FROM produits
WHERE categorie = 'électronique' ET prix < 500;
SELECT *
FROM clients
WHERE ville = 'Paris' OU ville = 'Lyon';
SELECT *
FROM commandes
WHERE NOT statut = 'annulé';
- Tri des résultats: La clause ORDER BY permet de trier le jeu de résultats :
SELECT nom, prenom, date_inscription
FROM membres
ORDER BY date_inscription DESC, nom ASC;
ASC indique un ordre croissant, tandis que DESC indique un ordre décroissant.
- Limitation du nombre d'enregistrets: La clause LIMIT restreint le nombre d'enregistrets retournés par une instruction SELECT :
SELECT *
FROM articles
LIMIT 10 OFFSET 20;
OFFSET est optionnel et indique à partir de quel enregistrement commencer.
- Fonctions d'agrégation: Des fonctions comme COUNT(), SUM(), AVG(), MIN(), MAX() permettent d'effectuer des opérations de comptage, sommation, calcul de moyenne, etc. sur une colonne :
SELECT COUNT(*) AS total_clients FROM clients;
SELECT SUM(montant) AS chiffre_affaires FROM ventes;
- Opérations JOIN: Les opérations JOIN permettent de combiner des lignes de deux ou plusieurs tables sur une colonne commune. Les types courants incluent INNER JOIN (jointure interne), LEFT JOIN (jointure gauche), RIGHT JOIN (jointure droite) et FULL OUTER JOIN (jointure externe complète) :
SELECT clients.nom, commandes.date
FROM clients
INNER JOIN commandes ON clients.id = commandes.client_id;
- Clauses GROUP BY et HAVING: GROUP BY permet de regrouper les résultats, et peut être combiné avec des fonctions d'agrégation pour résumer chaque groupe. HAVING fonctionne comme WHERE mais filtre après le regroupement :
SELECT categorie, COUNT(*) AS nombre_produits
FROM produits
GROUP BY categorie
HAVING COUNT(*) > 5;
- Requêtes complexes et sous-requêtes: Une sous-requête est une requête SQL imbriquée à l'intérieur d'une autre requête :
SELECT nom
FROM employes
WHERE salaire > (SELECT AVG(salaire) FROM employes);
- Indexation: La création d'index sur une ou plusieurs colonnes d'une table de base de données améliore considérablement la vitesse des opérations de récupération :
CREATE INDEX idx_nom_client ON clients(nom);
- Vues de base de données: Une vue est une table virtuelle basée sur le résultat d'une requête SQL :
CREATE VIEW vue_clients_actifs AS
SELECT id, nom, email
FROM clients
WHERE statut = 'actif';
- Procédures stockées et fonctions: Les procédures stockées et fonctions permettent d'écrire des scripts SQL pour exécuter des tâches complexes :
DELIMITER //
CREATE PROCEDURE ajouter_client(IN p_nom VARCHAR(50), IN p_email VARCHAR(100))
BEGIN
INSERT INTO clients(nom, email) VALUES(p_nom, p_email);
END //
DELIMITER ;
- Déclencheurs (Triggers): Les déclencheurs sont des procédures automatiques qui s'exécutent en réponse à des événements spécifiques comme INSERT, UPDATE, DELETE :
CREATE TRIGGER verifier_stock
AFTER INSERT ON commandes
FOR EACH ROW
BEGIN
UPDATE produits SET stock = stock - NEW.quantite WHERE id = NEW.produit_id;
END;
- Gestion des transactions: MySQL prend en charge les transactions pour assurer que toutes les commandes SQL sont exécutées comme une unité unique, avec un retour en arrière si une commande échoue :
START TRANSACTION;
UPDATE comptes SET solde = solde - 100 WHERE id = 1;
UPDATE comptes SET solde = solde + 100 WHERE id = 2;
COMMIT;
- Sécurité: La sécurité inclut l'authentification des utilisateurs, le contrôle des droits pour s'assurer que seuls les utilisateurs autorisés peuvent effectuer des opérations spécfiiques :
GRANT SELECT, INSERT ON ma_base.* TO 'utilisateur'@'localhost';
- Optimisation des performances: L'optimisation des performances inclut l'utilisation appropriée des index, l'optimisation du cache, l'amélioration des requêtes et la configuration matérielle :
EXPLAIN SELECT * FROM grandes_tables WHERE colonne_indexee = 'valeur';
- Gestion des erreurs: Lors de l'écriture de scripts SQL complexes, il est important de considérer les mécanismes de capture d'erreurs et de gestion des exceptions :
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1 @sqlstate = RETURNED_SQLSTATE, @errno = MYSQL_ERRNO, @text = MESSAGE_TEXT;
SET @error_msg = CONCAT('Erreur ', @errno, ' (', @sqlstate, '): ', @text);
END;
- Importation/Exportation de données: MySQL fournit divers outils comme mysqldump ou la commande LOAD DATA INFILE pour importer ou exporter de grandes quantités de données :
LOAD DATA INFILE 'chemin/vers/fichier.csv'
INTO TABLE ma_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';
- Corresopndance d'expressions régulières: Pour la correspondance de modèles sur des champs textuels, on peut utiliser les fonctionnalités d'expressions régulières :
SELECT * FROM produits WHERE nom REGEXP '^smartphone.*[0-9]$';
- Fonctions de date et d'heure: Pour les problèmes liés aux dates et heures, MySQL propose des fonctions spécialisées :
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') AS date_actuelle;
SELECT DATEDIFF(date_fin, date_debut) AS duree_jours FROM projets;