FIFO Informatique
http://www.fifo.fr/fifo

Accueil > Infos MySQL  > MySQL et les effacements en cascade
 

MySQL et les effacements en cascade

Le problème

Vous avez

  • Une table des gens, que nous appelons T_GENS, avec un champ GENS_ID
  • Une table des vehicule, que nous appelons T_VEHICULE, avec un champ VEHICULE_GENS_ID qui fait le lien avec la table des gens (T_GENS).

Dans T_VEHICULE, on stocke les véhicules qui appartiennent aux gens référencés dans T_GENS.

Dans ces conditions, si on supprime des gens de la table, on se retrouve avec des véhicules "orphelins" qui n’appartiennent plus à personne, et il y a en plus toutes les chances pour que votre application ne vous permette plus d’accéder à ces véhicules. Nous voila donc avec des scories dans notre base de données.

Comment faire pour éviter ce problème ?

Les clés étrangères

La solution est prévue par MySQL. Elle s’appelle FOREIGN KEY .

Pour créer des FOREIGN KEY, nous devons nous assurer que :

  • T_GENS et T_VEHICULE sont des tables InnoDB, et qu’elles ne sont pas des "TEMPORARY" tables
  • Il faut que les champs concernés soient des INDEX
  • Si les tables existent déjà, attention, il faut qu’elles soient "propres" ... C’est à dire qu’il n’y ait pas déjà dans T_VEHICULE des enregistrements qui ne correspondent à aucun enregistrement de T_GENS. Donc ... d’abord, faire du ménage !

Ensuite il suffit de passer la commande :


ALTER TABLE T_VEHICULE
ADD FOREIGN KEY VEHICULE_GENS_ID
REFERENCES T_GENS (GENS_ID)
ON DELETE CASCADE

Et voila !

En savoir plus

Les FOREIGN KEY permettent bien d’autres choses. Cet article volontairement simple n’en couvre qu’une infime partie.

Pour en savoir plus, ou pour avoir plus de précisions, il faut se référer au chapître correspondant dans la doc MySQL.