La clause ON DELETE CASCADE dans MySQL est utilisée pour automatiquement retirer les enregistrements correspondants de la table enfant lorsque nous supprimons les lignes de la table parent. C'est une sorte d'action référentielle liée au clé étrangère .
Supposons que nous ayons créé deux tables avec une FOREIGN KEY dans une relation de clé étrangère, faisant des deux tables un parent et un enfant. Ensuite, nous définissons une clause ON DELETE CASCADE pour une FOREIGN KEY qui doit être définie pour que l'autre réussisse dans les opérations en cascade. Si ON DELETE CASCADE est défini pour une seule clause FOREIGN KEY, alors les opérations en cascade généreront une erreur.
Exemple MySQL SUR SUPPRESSION EN CASCADE
Voyons comment nous pouvons utiliser la clause ON DELETE CASCADE dans la table MySQL. Tout d'abord, nous allons créer deux tables nommées Employé et paiement . Les deux tables sont liées via une clé étrangère avec une opération en cascade lors de la suppression. Ici, un employé est le table parent , et le paiement est le table enfant . Les scripts suivants créent les deux tables ainsi que leurs enregistrements.
Tableau : Employé
ajouter à un tableau en java
L'instruction suivante crée une table Employee :
CREATE TABLE Employee ( emp_id int(10) NOT NULL, name varchar(40) NOT NULL, birthdate date NOT NULL, gender varchar(10) NOT NULL, hire_date date NOT NULL, PRIMARY KEY (emp_id) );
Ensuite, exécutez la requête d'insertion pour remplir les enregistrements.
755 chmods
INSERT INTO Employee (emp_id, name, birthdate, gender, hire_date) VALUES (101, 'Bryan', '1988-08-12', 'M', '2015-08-26'), (102, 'Joseph', '1978-05-12', 'M', '2014-10-21'), (103, 'Mike', '1984-10-13', 'M', '2017-10-28'), (104, 'Daren', '1979-04-11', 'M', '2006-11-01'), (105, 'Marie', '1990-02-11', 'F', '2018-10-12');
Exécutez la requête SELECT pour vérifier les données dans une table, qui peut être affichée ci-dessous :
Tableau : Paiement
L'instruction ci-dessous crée un tableau Paiement :
CREATE TABLE Payment ( payment_id int(10) PRIMARY KEY NOT NULL, emp_id int(10) NOT NULL, amount float NOT NULL, payment_date date NOT NULL, FOREIGN KEY (emp_id) REFERENCES Employee (emp_id) ON DELETE CASCADE );
Ensuite, exécutez le insérer une instruction pour remplir les enregistrements dans un tableau.
INSERT INTO Payment (payment_id, emp_id, amount, payment_date) VALUES (301, 101, 1200, '2015-09-15'), (302, 101, 1200, '2015-09-30'), (303, 101, 1500, '2015-10-15'), (304, 101, 1500, '2015-10-30'), (305, 102, 1800, '2015-09-15'), (306, 102, 1800, '2015-09-30');
Exécutez la requête SELECT pour vérifier les données dans une table, qui peut être affichée ci-dessous :
Laissez-nous supprimer données de la table parent Employee. Pour ce faire, exécutez l'instruction suivante :
mysql> DELETE FROM Employee WHERE emp_id = 102;
La déclaration ci-dessus supprimera les enregistrements d'employés dont emp_id = 102 et référencement données dans la table enfant. Nous pouvons vérifier les données à l'aide de l'instruction SELECT qui donnera le résultat suivant :
Java si instruction
Dans le résultat ci-dessus, nous pouvons voir que toutes les lignes faisant référence à emp_id = 102 ont été automatiquement supprimées des deux tables.
Comment trouver la table concernée par l'action ON DELETE CASCADE ?
Parfois, avant de supprimer des enregistrements de la table, on souhaite connaître la table affectée par l'action référentielle ON DELETE CASCADE. Nous pouvons trouver ces informations en interrogeant les referential_constraints dans la base de données information_schema comme suit :
USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'database_name' AND referenced_table_name = 'parent_table' AND delete_rule = 'CASCADE'
L'instruction ci-dessous produit le résultat sur les tables associées à la table Employee avec la règle ON DELETE CASCADE dans le fichier employédb base de données:
USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'employeedb' AND referenced_table_name = 'Employee' AND delete_rule = 'CASCADE';
Après avoir exécuté la commande ci-dessus, nous obtiendrons le résultat ci-dessous :
MySQL SUR LA MISE À JOUR EN CASCADE
Clause ON UPDATE CASCADE dans MySQL est utilisé pour mise à jour les enregistrements correspondants de la table enfant automatiquement lorsque nous mettons à jour les lignes de la table parent. L'exemple suivant l'explique plus clairement.
topologie du réseau
Premièrement, nous devons utiliser le MODIFIER TABLE instruction pour ajouter la clause ON UPDATE CASCADE dans le tableau Paiement comme ci-dessous :
ALTER TABLE Payment ADD CONSTRAINT `payment_fk` FOREIGN KEY(emp_id) REFERENCES Employee (emp_id) ON UPDATE CASCADE;
Cela donnera le résultat suivant :
Dans le script ci-dessous, nous mettrons à jour l'identifiant de l'employé dans la table parent, et cela reflétera également automatiquement ce changement dans la table enfant :
mysql> UPDATE Employee SET emp_id = 102 WHERE emp_id = 103;
En vérifiant le contenu du tableau Employé et Paiement, nous verrons que emp_id les valeurs des colonnes seront mises à jour avec succès.