Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Durée de conservation des données

Après cette leçon: Je peux fixer une durée de conservation et trouver, puis supprimer, les lignes qui la dépassent.

Leçon de 55 min10 commandesLab MySQL et phpMyAdmin avec une base de boutique pour s’exercer en SQL

Combien de temps garder une commande ?

La durée de conservation est le temps pendant lequel une organisation garde une donnée personnelle avant de la supprimer. La fixer à l'avance évite de garder des données devenues inutiles, et donc exposées pour rien.

Une boutique en ligne a des commandes depuis des années. Personne n'a décidé quand les effacer. Vous allez apprendre à fixer la règle, puis à trouver les lignes qui la dépassent.

À la fin de cette leçon

Remarque

Je peux fixer une durée de conservation et trouver, puis supprimer, les lignes qui la dépassent.

Mots clés

MotCe que ça veut direExemple
Durée de conservationle temps pendant lequel on garde une donnée
Date limitele jour avant lequel une ligne est trop ancienne2024-01-01
Purgela suppression des lignes qui ont dépassé leur durée
Sauvegardeune copie de la base gardée pour la restaurer
Archivagegarder une donnée à part, avec un accès très limité

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Chaque donnée a une durée de conservation

Chaque donnée est gardée pour un but. Quand le but disparaît, la donnée doit disparaître aussi.

On fixe donc une durée par sorte de donnée, avant de collecter. Une loi impose parfois un minimum, par exemple pour les factures, ou un maximum.

Les durées du tableau sont des exemples inventés pour la leçon.

Exemple : une durée par sorte de donnée

DonnéeButDurée proposée
Panier abandonnéRelancer le client30 jours
Compte sans connexionGarder l'accès ouvert2 ans sans connexion
Commande livréeSuivi après-vente18 mois après la livraison
FacturePreuve comptableDurée que fixe la loi

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Mesurer le retard des commandes du laboratoire

Lancez les deux premiers Runs pour préparer le terminal. Le troisième cherche la commande la plus ancienne de la boutique.

Le dernier compte les commandes passées avant le 1er janvier 2024. Une date fixe donne toujours le même résultat, quel que soit le jour où vous travaillez.

Accepter le certificat du serveur

Commande
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnf

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Un nom court pour la boutique

Commande
alias sql='mariadb -h db -u student -pstudent shop -t -e'

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

La commande la plus ancienne

Commande
sql "SELECT MIN(ordered_at) AS plus_ancienne FROM orders"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Les commandes avant 2024

Commande
sql "SELECT COUNT(*) AS a_supprimer FROM orders WHERE ordered_at < '2024-01-01'"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lire d'abord, supprimer ensuite

Une purge se fait en deux temps. D'abord un SELECT avec la date limite, pour voir les lignes concernées. Ensuite un DELETE avec la même condition.

Une exception existe : une ligne liée à un litige en cours est gardée jusqu'à sa fin. On l'écarte dans la condition.

Dans le laboratoire, vous purgez une copie, jamais la boutique.

Purger une copie dans votre base

Les Runs ci-dessous copient les commandes dans votre base student_vie_privee, puis comptent. Ils passent ensuite à la suppression.

La copie compte 120 lignes. La purge en retire 19, la même quantité que votre SELECT. Il en reste 101.

Un nom court pour écrire

Commande
alias bd='mariadb -h db -u student -pstudent -t -e'

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Créer votre base

Commande
bd "CREATE DATABASE IF NOT EXISTS student_vie_privee"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Jeter une ancienne copie

Commande
bd "DROP TABLE IF EXISTS student_vie_privee.commandes"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Copier les commandes

Commande
bd "CREATE TABLE student_vie_privee.commandes AS SELECT id, customer_id, ordered_at, status FROM shop.orders"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Purger les commandes avant 2024

Commande
bd "DELETE FROM student_vie_privee.commandes WHERE ordered_at < '2024-01-01'"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Compter ce qui reste

Commande
bd "SELECT COUNT(*) AS restantes FROM student_vie_privee.commandes"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Exemple : trois temps d'une purge

TempsRequêteRésultat dans le laboratoire
1. CompterSELECT COUNT(*) ... WHERE ordered_at < date19 lignes
2. SupprimerDELETE ... WHERE ordered_at < date19 lignes retirées
3. ContrôlerSELECT COUNT(*) sur la copie101 lignes restantes

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Supprimer la ligne ne suffit pas toujours

Une donnée se cache à plusieurs endroits : la table, les sauvegardes, les journaux, les exports et les copies de test.

Supprimer la ligne ne touche que la table. Les sauvegardes gardent la donnée jusqu'à leur propre expiration. Il faut donc leur donner une durée aussi.

Dans la boutique, des lignes d'une autre table peuvent pointer la ligne : on supprime d'abord les lignes qui dépendent d'elle.

Une erreur fréquente

Attention

Beaucoup pensent que garder toutes les données ne coûte rien. C'est faux : chaque ligne gardée reste exposée à une fuite et peut être demandée par la personne. Gardez une donnée seulement tant que son but existe.

À vous : trouver les lignes trop anciennes

Code: sql
-- Les connexions plus vieilles que la date limite sont à supprimer.
SELECT id, utilisateur, vue_le
FROM connexions
WHERE vue_le < '2024-06-01'
ORDER BY vue_le;
-- À vous : avancez la date limite au 2025-01-01 et relancez.
-- Combien de lignes entrent dans la liste ?

À propos de ce labo et de sa source: Lab MySQL et phpMyAdmin avec une base de boutique pour s’exercer en SQL

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.