MySQL

Mise à jour de données dans une table

Voici le chapitre Mise à jour de données dans une table — c’est ici que les choses deviennent délicates, parce que modifier de la donnée est plus risqué qu’en insérer. On va donc faire ça proprement.


🔧 Mise à jour de données dans une table

(UPDATE — WHERE, SET, multiples colonnes, jointures, conditions, sécurité, timestamps)

La commande centrale est :

UPDATE NomTable
SET Colonne = Valeur
WHERE Condition;

Le WHERE est vital. Sans lui, tu mets à jour toutes les lignes de la table (ce qui arrive plus souvent qu’on ne l’admet…).

On voit toutes les variantes utiles.

🟩 1. Mettre à jour une seule colonne

Exemple simple :

UPDATE User
SET Nom = 'Alexandre'
WHERE UserID = 12;

La condition cible 1 seule ligne, ce qui est ce qu’on veut dans 99 % des cas.

🟦 2. Mettre à jour plusieurs colonnes à la fois

UPDATE User
SET Nom = 'Alexandre',
    Email = 'alex@example.com'
WHERE UserID = 12;

Pratique quand tu fais une édition de profil par exemple.

🟧 3. Mise à jour basée sur une condition (WHERE avancé)

Par exemple, mettre un nouveau domaine email pour tous les utilisateurs qui ont l’ancien :

UPDATE User
SET Email = REPLACE(Email, '@old.com', '@new.com')
WHERE Email LIKE '%@old.com';

Autre cas : désactiver tous les comptes inactifs depuis plus d’un an.

UPDATE User
SET Actif = 0
WHERE LastLogin < '2024-01-01';

🟥 4. Mise à jour de masse volontaire (pas de WHERE)

À utiliser avec précaution.

Exemple : réinitialiser tout le monde :

UPDATE User
SET Actif = 1;

Utile seulement lors de migrations ou nettoyages.

🟪 5. Mise à jour avec une valeur dynamique (NOW(), CURRENT_TIMESTAMP)

Exemple : enregistrer la dernière connexion de l’utilisateur :

UPDATE User
SET LastLogin = NOW()
WHERE UserID = 12;

Même chose lors d’une modification :

UPDATE Video
SET UpdateDate = CURRENT_TIMESTAMP
WHERE VideoID = 7;

🟫 6. Mise à jour liée à une autre table (UPDATE avec JOIN)

Cas classique dans SAMI :

mettre à jour une table pivot ou synchroniser un champ.

Exemple : changer le UserID d’une vidéo via l’email du propriétaire :

UPDATE Video v
JOIN User u ON v.UserID = u.UserID
SET v.UserID = 12
WHERE u.Email = 'ancien@mail.com';

Autre exemple : mettre tous les genres d’une vidéo à un certain statut :

UPDATE VideoGenre vg
JOIN Genre g ON vg.GenreID = g.GenreID
SET g.Visible = 0
WHERE vg.VideoID = 7;

Ces requêtes sont très puissantes et très dangereuses si mal utilisées.

🟨 7. Mise à jour conditionnelle avec logique (IF)

UPDATE User
SET TentativeLogin = IF(TentativeLogin >= 3, 0, TentativeLogin + 1)
WHERE UserID = 12;

Utile pour la gestion des tentatives de login comme dans ton système SAMI.

🔐 8. Mise à jour sécurisée (limiter le nombre de lignes)

Tu peux limiter la requête pour éviter les catastrophes :

UPDATE User
SET Actif = 0
WHERE GradeID = 3
LIMIT 50;

MySQL ne modifiera que 50 lignes max, même si la condition en matchait plus.

🧲 9. Mise à jour avec sous-requête (subquery)

Exemple : mettre le UserID d’une vidéo sur celui avec l’email “admin@sami.fr” :

UPDATE Video
SET UserID = (SELECT UserID FROM User WHERE Email = 'admin@sami.fr')
WHERE VideoID = 5;

Très pratique pour nettoyer la BDD.

🔎 10. Vérifier les changements

Avant mise à jour :

SELECT * FROM User WHERE UserID = 12;

Après :

SELECT * FROM User WHERE UserID = 12;

Toujours s’assurer que la modification est cohérente.

🧨 11. Les erreurs fréquentes (et comment les éviter)

Voici les pièges les plus classiques :

Oublier le WHERE

→ met à jour TOUS les enregistrements

Toujours vérifier deux fois.

Mettre une condition trop large

WHERE Email LIKE '%gmail%'

Ça peut toucher 2000 lignes au lieu d’une.

• Modifier une clé étrangère sans vérifier la contrainte

→ entraîne des erreurs :

Cannot delete or update a parent row...

Il faut parfois désactiver temporairement les contraintes (mais pas conseillé).

🎯 Conclusion

Avec ça tu maîtrises :

  • mise à jour simple
  • mise à jour multiple
  • logique conditionnelle
  • JOIN pour mise à jour complexe
  • protection contre mise à jour massive involontaire
  • mises à jour avec dates automatiques

C’est un chapitre critique pour gérer sérieusement une base MySQL.

Previous
Insertion de données dans une table