MySQL SUR CASCADE DELETE
Résumé : dans ce tutoriel, vous apprendrez à utiliser l’action référentielle MySQL ON DELETE CASCADE
pour une clé étrangère afin de supprimer les données de plusieurs tables liées.
Dans le tutoriel précédent, vous avez appris à supprimer les données de plusieurs tables liées en utilisant une seule instruction DELETE
. Cependant, MySQL fournit un moyen plus efficace appelé ON DELETE CASCADE
action référentielle pour une clé étrangère qui vous permet de supprimer les données des tables enfant automatiquement lorsque vous supprimez les données de la table parent.
MySQL ON DELETE CASCADE exemple
Regardons un exemple d’utilisation de MySQL ON DELETE CASCADE
.
Supposons que nous avons deux tables :buildings
et rooms
. Dans ce modèle de base de données, chaque bâtiment possède une ou plusieurs pièces. Cependant, chaque pièce appartient à un seul et unique bâtiment. Une pièce n’existerait pas sans un bâtiment.
La relation entre les tables buildings
et rooms
est de type un à plusieurs (1:N), comme l’illustre le diagramme de base de données suivant :
Lorsque vous supprimez une ligne de la table buildings
, vous voulez également supprimer toutes les lignes de la table rooms
qui font référence à la ligne de la table buildings
. Par exemple, lorsque vous supprimez une ligne avec le bâtiment no. 2 dans la table buildings
comme la requête suivante:
Code language: SQL (Structured Query Language) (sql)
Vous voulez également que les lignes de la table rooms
qui font référence au numéro de bâtiment 2 soient également supprimées.
Les étapes suivantes démontrent comment l’action référentielle ON DELETE CASCADE
fonctionne.
Étape 1. Créez la table buildings
:
Code language: SQL (Structured Query Language) (sql)
Etape 2. Créez la table rooms
:
Code language: SQL (Structured Query Language) (sql)
Notez que la clause ON DELETE CASCADE
à la fin de la définition de la contrainte de clé étrangère.
Etape 3. Insérez des lignes dans la table buildings
:
Code language: SQL (Structured Query Language) (sql)
Etape 4. Interroger les données de la table buildings
:
Code language: SQL (Structured Query Language) (sql)
Nous avons deux lignes dans la table buildings
.
Etape 5. Insérer des lignes dans la table rooms
:
Code language: SQL (Structured Query Language) (sql)
Etape 6. Interroger les données de la table rooms
:
Code language: SQL (Structured Query Language) (sql)
Nous avons trois pièces qui appartiennent au bâtiment no 1 et deux pièces qui appartiennent au bâtiment no 2.
Etape 7. Supprimer le bâtiment avec le bâtiment n°. 2:
Code language: SQL (Structured Query Language) (sql)
Etape 8. Interroger les données de la table rooms
:
Code language: SQL (Structured Query Language) (sql)
Comme vous pouvez le voir, toutes les lignes qui font référence à building_no
2 ont été automatiquement supprimées.
Notez que ON DELETE CASCADE
ne fonctionne qu’avec les tables dont les moteurs de stockage supportent les clés étrangères, par exemple, InnoDB.
Certains types de tables ne prennent pas en charge les clés étrangères comme MyISAM, vous devez donc choisir des moteurs de stockage appropriés pour les tables que vous prévoyez d’utiliser l’action référentielle MySQL ON DELETE CASCADE
.
Conseils pour trouver les tables affectées par l’action MySQL ON DELETE CASCADE
Parfois, il est utile de savoir quelle table est affectée par l’action référentielle ON DELETE CASCADE
lorsque vous supprimez des données d’une table. Vous pouvez interroger ces données à partir du referential_constraints
dans la base de données information_schema
comme suit:
Code language: SQL (Structured Query Language) (sql)
Par exemple, pour trouver les tables qui ont été associées à la table buildings
avec la règle de suppression CASCADE
dans la base de données classicmodels
, vous utilisez la requête suivante:
Code language: SQL (Structured Query Language) (sql)
.