Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
d4:a05 [2025/10/01 14:35] – [1) Validation/annulation de requêtes] dthevenot | d4:a05 [2025/10/01 14:52] (Version actuelle) – [Exercices d'application] dthevenot | ||
---|---|---|---|
Ligne 74: | Ligne 74: | ||
=== Syntaxe === | === Syntaxe === | ||
- | Trois nouvelles commandes suffisent pour pouvoir utiliser pleinement les jalons, voici la SYNTAXE : | + | Trois nouvelles commandes suffisent pour pouvoir utiliser pleinement les jalons, voici la **SYNTAXE** : |
- | < | + | < |
- | SAVEPOINT nom_jalon; | + | |
-- Crée un jalon avec comme nom " | -- Crée un jalon avec comme nom " | ||
ROLLBACK [WORK] TO [SAVEPOINT] nom_jalon; | ROLLBACK [WORK] TO [SAVEPOINT] nom_jalon; | ||
Ligne 85: | Ligne 84: | ||
__Exemple :__ exécutez les requêtes suivantes en 1 fois. | __Exemple :__ exécutez les requêtes suivantes en 1 fois. | ||
- | < | + | < |
- | START TRANSACTION; | + | insert into genre (nomGenre) values(' |
- | insert into genre (nomGenre) values(' | + | SAVEPOINT jalon1; |
- | insert into genre (nomGenre) values(' | + | insert into genre (nomGenre) values(' |
+ | ROLLBACK TO SAVEPOINT jalon1; | ||
insert into genre (nomGenre) values(' | insert into genre (nomGenre) values(' | ||
COMMIT; | COMMIT; | ||
</ | </ | ||
- | On n' | + | < |
- | + | On n' | |
- | ==== autres exercices | + | ==== Exercices d' |
- | Ces exercices permettent de manipuler | + | === Objectifs === |
- | * Exercice 1 : Insérer un nouveau genre de livre | + | - Mettre en œuvre |
- | Table : genre(idGenre, | + | - Manipuler |
- | - 1. SET autocommit=0; | + | === Exercice 1 : gestion de comptes bancaires === |
- | - 2. INSERT INTO genre (nomGenre) VALUES(' | + | |
- | - 3. Vérifiez le contenu de la table avant COMMIT puis après | + | |
- | + | ||
- | Correction | + | |
- | < | + | |
- | SET autocommit=0; | + | |
- | INSERT INTO genre (nomGenre) VALUES(' | + | |
- | SELECT * FROM genre; -- L’enregistrement n’est pas encore visible après fermeture de session | + | |
- | COMMIT; -- Rend le changement définitif | + | |
- | </ | + | |
- | + | ||
- | * Exercice 2 : Transfert bancaire | + | |
- Créer une table compte(id, nom, solde). | - Créer une table compte(id, nom, solde). | ||
- | - Effectuer | + | - Insérer quelques comptes. |
- | | + | - Ecrire les commandes SQL pour effectuer |
- | + | == Utilisation de SAVEPOINT | |
- | Correction Exercice 2 | + | - Effectuer des transferts multiples |
- | < | + | == Concurrence == |
- | START TRANSACTION; | + | - Simuler |
- | UPDATE compte SET solde = solde - 200 WHERE id = 1; | + | - Montrer |
- | UPDATE compte SET solde = solde + 200 WHERE id = 2; | + | |
- | COMMIT; | + | |
- | -- Si problème : ROLLBACK; | + | |
- | </ | + | |
- | + | ||
- | * Exercice 3 : SAVEPOINT | + | |
- | - Créer plusieurs insertions dans une table avec un SAVEPOINT. | + | |
- | - Annuler seulement une partie des requêtes. | + | |
- | + | ||
- | Correction Exercice 3 | + | |
- | < | + | |
- | START TRANSACTION; | + | |
- | INSERT INTO genre (nomGenre) VALUES(' | + | |
- | SAVEPOINT s1; | + | |
- | INSERT INTO genre (nomGenre) VALUES(' | + | |
- | ROLLBACK TO s1; | + | |
- | INSERT INTO genre (nomGenre) VALUES(' | + | |
- | COMMIT; | + | |
- | </ | + | |
- | * Exercice 4 : Concurrence | + | |
- | Ouvrir | + | |
- | * - Dans la première, insérer un enregistrement sans COMMIT. | + | |
- | | + | |
- | + | ||
- | < | + | |
- | === Validation implicite et commandes non annulables === | + | |
- | + | ||
- | Vous savez déjà que, pour terminer une transaction, | + | |
- | + | ||
- | Ça, c'est la manière classique et recommandée. Mais il faut savoir qu'un certain nombre d' | + | |
- | + | ||
- | Par ailleurs, ces commandes ne peuvent pas être annulées par un ROLLBACK. | + | |
- | + | ||
- | == Commandes DDL == | + | |
- | + | ||
- | Toutes les commandes qui créent, modifient, suppriment des objets dans la base de données valident implicitement les transactions. Ces commandes forment ce que l'on appelle les requêtes DDL, pour Data Definition Langage. | + | |
- | Cela comprend donc : | + | |
- | * La création et suppression de bases de données : CREATE DATABASE, DROP DATABASE | + | |
- | * La création, modification, | + | |
- | * La création, modification, | + | |
- | * La création d' | + | |
- | * De manière générale, tout ce qui influe sur la structure de la base de données, et non sur les données elles-mêmes. | + | |
- | + | ||
- | == Utilisateurs == | + | |
- | + | ||
- | La création, la modification et la suppression d' | + | |
- | === Transactions et verrous === | ||
- | |||
- | Il n’est pas possible d' | ||
- | Le fait d' | ||
- | La création et suppression de verrous de table clôturent aussi une transaction en la validant implicitement (voir partie suivante). | ||
- | === Chargement de données === | ||
- | |||
- | Enfin, le chargement de données avec LOAD DATA provoque également une validation implicite.</ | ||
==== Commandes essentielles ==== | ==== Commandes essentielles ==== | ||
< | < |