Skip to content

Commit 1a0cc59

Browse files
author
Alex-Octocorn
committed
Deploying to gh-pages from @ 4073a7e 🚀
1 parent 6c99151 commit 1a0cc59

File tree

3 files changed

+277
-1
lines changed

3 files changed

+277
-1
lines changed

06_transactions.slides.html

Lines changed: 274 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,274 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8" />
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
6+
7+
<title>Transactions</title>
8+
<link rel="shortcut icon" href="./favicon.ico" />
9+
<link rel="stylesheet" href="./dist/reset.css" />
10+
<link rel="stylesheet" href="./dist/reveal.css" />
11+
<link rel="stylesheet" href="./dist/theme/solarized.css" id="theme" />
12+
<link rel="stylesheet" href="./css/highlight/base16/zenburn.css" />
13+
14+
15+
<script type="text/javascript">
16+
setTimeout(() => {
17+
fetch("https://raw.githubusercontent.com/Alex-Octocorn/logo/main/style.js")
18+
.then(script => script.text())
19+
.then((script) => {
20+
const head = document.querySelector("head");
21+
const customCss = document.createElement("script");
22+
customCss.type = "text/javascript";
23+
customCss.appendChild(document.createTextNode(script));
24+
head.appendChild(customCss);
25+
});
26+
});
27+
</script></head>
28+
<body>
29+
<div class="reveal">
30+
<div class="slides"><section ><section data-markdown><script type="text/template">
31+
32+
# SQL : Transactions
33+
34+
![SQL](./assets/sql.png) <!-- .element width="30%" align="left" -->
35+
36+
![MySQL](./assets/mysql.png) <!-- .element width="30%" align="right" -->
37+
</script></section><section data-markdown><script type="text/template">
38+
## Transactions
39+
40+
### Définition
41+
42+
- Une transaction est une suite d'opérations qui doit être exécutée dans son intégralité ou pas du tout.
43+
44+
- L'idée étant de tout annuler si une des étapes échoue.
45+
</script></section><section data-markdown><script type="text/template">
46+
## Transactions
47+
48+
### Exemple
49+
50+
Si je veux réaliser un virement bancaire, il faut :
51+
1. Vérifier que j'ai assez d'argent sur mon compte
52+
2. Débiter mon compte
53+
3. Créditer le compte du bénéficiaire
54+
55+
> Que se passerait-il en cas de coupure de courant entre l'étape 2 et 3 ?
56+
</script></section><section data-markdown><script type="text/template">
57+
## Transactions
58+
59+
### Exemple
60+
61+
- Je serais débité mais le bénéficiaire ne serait pas crédité.
62+
63+
> est l'argent ?!
64+
</script></section><section data-markdown><script type="text/template">
65+
## Transactions
66+
67+
### Solution
68+
69+
- Les transactions sont pour résoudre ce genre de problèmes
70+
71+
- On va réaliser les trois étapes sans les valider
72+
73+
- Si tout se passe bien, on valide la transaction
74+
75+
- Sinon, on annule toutes les opérations
76+
</script></section><section data-markdown><script type="text/template">
77+
## Transactions
78+
79+
### En image
80+
81+
![Transaction](assets/transaction.png)
82+
</script></section><section data-markdown><script type="text/template">
83+
## Transactions
84+
85+
### Les commits
86+
87+
- Comme pour Git, un `COMMIT` valide les opérations
88+
89+
- Sur un script SQL, il commit automatiquement à la fin du script
90+
91+
```mysql
92+
-- Désactiver les autocommits
93+
SET AUTOCOMMIT = 0;
94+
```
95+
96+
> Les données sont tout de même présentes dans la base de données, mais elles ne sont pas validées
97+
</script></section><section data-markdown><script type="text/template">
98+
## Transactions
99+
100+
### Les Rollbacks
101+
102+
- `ROLLBACK` annule les opérations qui n'ont pas été commités
103+
104+
- On peut rollback une transaction en cours
105+
106+
- On peut rollback un script SQL
107+
108+
```mysql
109+
-- Annuler les opérations
110+
ROLLBACK;
111+
```
112+
</script></section><section data-markdown><script type="text/template">
113+
## Transactions
114+
115+
### Petit test
116+
117+
Ajoutons un article dans la table `eleves`:
118+
119+
```mysql
120+
INSERT INTO eleves (nom, prenom, date_naissance)
121+
VALUES ('Devos', 'Alexandre', '1992-07-20')
122+
```
123+
124+
Vérifions :
125+
126+
```mysql
127+
SELECT * FROM eleves;
128+
ROLLBACK;
129+
SELECT * FROM eleves;
130+
```
131+
</script></section><section data-markdown><script type="text/template">
132+
## Transactions
133+
134+
### ROLLBACK
135+
136+
- Finalement, un rollback est un `ctrl + z` sur la base de données.
137+
138+
- Il remet la BDD tel qu'elle était eu dernier commit !
139+
140+
> Quel serait la commande Git équivalente ?
141+
142+
<aside class="notes"><p><code>git stash</code></p>
143+
</aside></script></section><section data-markdown><script type="text/template">
144+
## Transactions
145+
146+
### Essayons de valider
147+
148+
```mysql
149+
INSERT INTO eleves (nom, prenom, date_naissance)
150+
VALUES ('Devos', 'Alexandre', '1992-07-20');
151+
COMMIT;
152+
ROLLBACK;
153+
```
154+
</script></section><section data-markdown><script type="text/template">
155+
## Avant de passer à la suite
156+
157+
Pensez à réactiver les autocommits :
158+
159+
```mysql
160+
SET AUTOCOMMIT = 1;
161+
```
162+
</script></section></section><section ><section data-markdown><script type="text/template">
163+
## Transactions
164+
165+
### Les transactions en SQL
166+
167+
- Plutôt que de désactiver les autocommits, on peut utiliser les transactions
168+
169+
- Cela évite d'oublier de les réactiver !
170+
171+
- On termine une transaction avec `COMMIT` ou `ROLLBACK`
172+
173+
```mysql
174+
START TRANSACTION;
175+
-- Requêtes
176+
COMMIT;
177+
```
178+
</script></section><section data-markdown><script type="text/template">
179+
## Transactions
180+
181+
### Les savepoints
182+
183+
- On peut créer des points de sauvegarde dans une transaction
184+
185+
- On peut revenir à un savepoint avec `ROLLBACK TO`
186+
187+
```mysql
188+
START TRANSACTION;
189+
-- Requêtes
190+
SAVEPOINT savepoint1;
191+
-- Requêtes
192+
SAVEPOINT savepoint2;
193+
-- Requêtes
194+
ROLLBACK TO savepoint1;
195+
-- Requêtes
196+
COMMIT;
197+
```
198+
</script></section><section data-markdown><script type="text/template">
199+
## Transactions
200+
201+
### Validations implicites
202+
203+
Certains éléments valident automatiquement une transaction :
204+
- `CREATE TABLE`, `DROP TABLE`,
205+
- `CREATE INDEX`, `DROP INDEX`,
206+
- `ALTER TABLE`, `RENAME TABLE`,
207+
- `TRUNCATE TABLE`, `LOCK TABLES`, `UNLOCK TABLES`
208+
209+
> Globalement, tout ce qui influe sur la structure de la base de données !
210+
</script></section><section data-markdown><script type="text/template">
211+
## Transactions
212+
213+
### Validations implicites
214+
215+
- Il n'est pas possible de créer une transaction dans une transaction
216+
217+
- En réalité `START TRANSACTION` commite la transaction en cours avant d'en créer une nouvelle !
218+
</script></section></section><section data-markdown><script type="text/template">
219+
## Retour à l'index
220+
221+
[Index](index.html)</script></section></div>
222+
</div>
223+
224+
<script src="./dist/reveal.js"></script>
225+
226+
<script src="./plugin/markdown/markdown.js"></script>
227+
<script src="./plugin/highlight/highlight.js"></script>
228+
<script src="./plugin/zoom/zoom.js"></script>
229+
<script src="./plugin/notes/notes.js"></script>
230+
<script src="./plugin/math/math.js"></script>
231+
<script>
232+
function extend() {
233+
var target = {};
234+
for (var i = 0; i < arguments.length; i++) {
235+
var source = arguments[i];
236+
for (var key in source) {
237+
if (source.hasOwnProperty(key)) {
238+
target[key] = source[key];
239+
}
240+
}
241+
}
242+
return target;
243+
}
244+
245+
// default options to init reveal.js
246+
var defaultOptions = {
247+
controls: true,
248+
progress: true,
249+
history: true,
250+
center: true,
251+
transition: 'default', // none/fade/slide/convex/concave/zoom
252+
slideNumber: true,
253+
plugins: [
254+
RevealMarkdown,
255+
RevealHighlight,
256+
RevealZoom,
257+
RevealNotes,
258+
RevealMath
259+
]
260+
};
261+
262+
// options from URL query string
263+
var queryOptions = Reveal().getQueryHash() || {};
264+
265+
var options = extend(defaultOptions, {}, queryOptions);
266+
</script>
267+
268+
<script src="./_assets/theme.js"></script>
269+
270+
<script>
271+
Reveal.initialize(options);
272+
</script>
273+
</body>
274+
</html>

assets/transaction.png

25.9 KB
Loading

index.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@
3434
- [Présentation](01_presentation.slides.html)
3535
- [Création et commandes de base](02_creation-bdd.slides.html)
3636
- [Jointures](03_jointures.slides.html)
37-
- [Vues et fonctions](04_vues-et-fonctions.slides.html)</script></section></div>
37+
- [Vues et fonctions](04_vues-et-fonctions.slides.html)
38+
- [Sous-requêtes](05_sous-requetes.slides.html)
39+
- [Transactions](06_transactions.slides.html)</script></section></div>
3840
</div>
3941

4042
<script src="./dist/reveal.js"></script>

0 commit comments

Comments
 (0)