Skip to content

Commit 4073a7e

Browse files
author
0h My Goat
committed
feat: transactions ✨
1 parent fa7ec2b commit 4073a7e

File tree

4 files changed

+235
-2
lines changed

4 files changed

+235
-2
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Pour chaque exercice, vous retrouverez trois niveaux de difficulté :
2525
- [x] [Fonctions](/cours/04_fonctions.slides.md)
2626
- [x] [Sous requêtes](/cours/05_sous-requetes.slides.md)
2727
- [ ] [Conception d'une BDD]()
28-
- [ ] [Transactions]()
28+
- [x] [Transactions](/cours/06_transactions.slides.md)
2929
- [ ] [Procédures stockées et Triggers]()
3030

3131
## Ressources 👜

cours/00_index.slides.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,6 @@ contributors:
1212
- [Présentation](01_presentation.slides.html)
1313
- [Création et commandes de base](02_creation-bdd.slides.html)
1414
- [Jointures](03_jointures.slides.html)
15-
- [Vues et fonctions](04_vues-et-fonctions.slides.html)
15+
- [Vues et fonctions](04_vues-et-fonctions.slides.html)
16+
- [Sous-requêtes](05_sous-requetes.slides.html)
17+
- [Transactions](06_transactions.slides.html)

cours/06_transactions.slides.md

Lines changed: 231 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,231 @@
1+
---
2+
title: Transactions
3+
theme: solarized
4+
author: Alexandre Devos
5+
company: Octocorn
6+
contributors:
7+
- Alexandre Devos
8+
---
9+
10+
# SQL : Transactions
11+
12+
![SQL](./assets/sql.png) <!-- .element width="30%" align="left" -->
13+
14+
![MySQL](./assets/mysql.png) <!-- .element width="30%" align="right" -->
15+
16+
----
17+
18+
## Transactions
19+
20+
### Définition
21+
22+
- Une transaction est une suite d'opérations qui doit être exécutée dans son intégralité ou pas du tout.
23+
24+
- L'idée étant de tout annuler si une des étapes échoue.
25+
26+
----
27+
28+
## Transactions
29+
30+
### Exemple
31+
32+
Si je veux réaliser un virement bancaire, il faut :
33+
1. Vérifier que j'ai assez d'argent sur mon compte
34+
2. Débiter mon compte
35+
3. Créditer le compte du bénéficiaire
36+
37+
> Que se passerait-il en cas de coupure de courant entre l'étape 2 et 3 ?
38+
39+
----
40+
41+
## Transactions
42+
43+
### Exemple
44+
45+
- Je serais débité mais le bénéficiaire ne serait pas crédité.
46+
47+
> Où est l'argent ?!
48+
49+
----
50+
51+
## Transactions
52+
53+
### Solution
54+
55+
- Les transactions sont là pour résoudre ce genre de problèmes
56+
57+
- On va réaliser les trois étapes sans les valider
58+
59+
- Si tout se passe bien, on valide la transaction
60+
61+
- Sinon, on annule toutes les opérations
62+
63+
----
64+
65+
## Transactions
66+
67+
### En image
68+
69+
![Transaction](assets/transaction.png)
70+
71+
----
72+
73+
## Transactions
74+
75+
### Les commits
76+
77+
- Comme pour Git, un `COMMIT` valide les opérations
78+
79+
- Sur un script SQL, il commit automatiquement à la fin du script
80+
81+
```mysql
82+
-- Désactiver les autocommits
83+
SET AUTOCOMMIT = 0;
84+
```
85+
86+
> Les données sont tout de même présentes dans la base de données, mais elles ne sont pas validées
87+
88+
----
89+
90+
## Transactions
91+
92+
### Les Rollbacks
93+
94+
- `ROLLBACK` annule les opérations qui n'ont pas été commités
95+
96+
- On peut rollback une transaction en cours
97+
98+
- On peut rollback un script SQL
99+
100+
```mysql
101+
-- Annuler les opérations
102+
ROLLBACK;
103+
```
104+
105+
----
106+
107+
## Transactions
108+
109+
### Petit test
110+
111+
Ajoutons un article dans la table `eleves`:
112+
113+
```mysql
114+
INSERT INTO eleves (nom, prenom, date_naissance)
115+
VALUES ('Devos', 'Alexandre', '1992-07-20')
116+
```
117+
118+
Vérifions :
119+
120+
```mysql
121+
SELECT * FROM eleves;
122+
ROLLBACK;
123+
SELECT * FROM eleves;
124+
```
125+
126+
----
127+
128+
## Transactions
129+
130+
### ROLLBACK
131+
132+
- Finalement, un rollback est un `ctrl + z` sur la base de données.
133+
134+
- Il remet la BDD tel qu'elle était eu dernier commit !
135+
136+
> Quel serait la commande Git équivalente ?
137+
138+
Note: `git stash`
139+
140+
----
141+
142+
## Transactions
143+
144+
### Essayons de valider
145+
146+
```mysql
147+
INSERT INTO eleves (nom, prenom, date_naissance)
148+
VALUES ('Devos', 'Alexandre', '1992-07-20');
149+
COMMIT;
150+
ROLLBACK;
151+
```
152+
153+
----
154+
155+
## Avant de passer à la suite
156+
157+
Pensez à réactiver les autocommits :
158+
159+
```mysql
160+
SET AUTOCOMMIT = 1;
161+
```
162+
163+
---
164+
165+
## Transactions
166+
167+
### Les transactions en SQL
168+
169+
- Plutôt que de désactiver les autocommits, on peut utiliser les transactions
170+
171+
- Cela évite d'oublier de les réactiver !
172+
173+
- On termine une transaction avec `COMMIT` ou `ROLLBACK`
174+
175+
```mysql
176+
START TRANSACTION;
177+
-- Requêtes
178+
COMMIT;
179+
```
180+
181+
----
182+
183+
## Transactions
184+
185+
### Les savepoints
186+
187+
- On peut créer des points de sauvegarde dans une transaction
188+
189+
- On peut revenir à un savepoint avec `ROLLBACK TO`
190+
191+
```mysql
192+
START TRANSACTION;
193+
-- Requêtes
194+
SAVEPOINT savepoint1;
195+
-- Requêtes
196+
SAVEPOINT savepoint2;
197+
-- Requêtes
198+
ROLLBACK TO savepoint1;
199+
-- Requêtes
200+
COMMIT;
201+
```
202+
203+
----
204+
205+
## Transactions
206+
207+
### Validations implicites
208+
209+
Certains éléments valident automatiquement une transaction :
210+
- `CREATE TABLE`, `DROP TABLE`,
211+
- `CREATE INDEX`, `DROP INDEX`,
212+
- `ALTER TABLE`, `RENAME TABLE`,
213+
- `TRUNCATE TABLE`, `LOCK TABLES`, `UNLOCK TABLES`
214+
215+
> Globalement, tout ce qui influe sur la structure de la base de données !
216+
217+
----
218+
219+
## Transactions
220+
221+
### Validations implicites
222+
223+
- Il n'est pas possible de créer une transaction dans une transaction
224+
225+
- En réalité `START TRANSACTION` commite la transaction en cours avant d'en créer une nouvelle !
226+
227+
---
228+
229+
## Retour à l'index
230+
231+
[Index](index.html)

cours/assets/transaction.png

25.9 KB
Loading

0 commit comments

Comments
 (0)