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)

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.