Maison > base de données > tutoriel mysql > Comment mettre à jour les lignes d'une même table à l'aide de déclencheurs MySQL ?

Comment mettre à jour les lignes d'une même table à l'aide de déclencheurs MySQL ?

DDD
Libérer: 2024-11-02 04:14:02
original
791 Les gens l'ont consulté

How to Update Rows in the Same Table using MySQL Triggers?

Déclencheurs MySQL et mises à jour sur la même table

Les déclencheurs MySQL offrent un mécanisme puissant pour automatiser les actions lorsque les données d'une base de données sont modifiées ou insérées . Cependant, une limitation importante des déclencheurs est leur incapacité à mettre à jour les lignes de la même table à laquelle le déclencheur est affecté. Cette restriction est due au risque d'appels récursifs, qui peuvent conduire à un comportement imprévisible.

Pour résoudre cette limitation, envisagez la solution de contournement suivante :

Utilisation de procédures stockées

Plutôt que de vous fier à un déclencheur, créez une procédure stockée qui encapsule la logique que vous souhaitez que le déclencheur exécute. Lorsque le déclencheur est déclenché, il peut alors appeler cette procédure stockée pour mettre à jour les lignes de la même table. Cette approche délègue efficacement la responsabilité de la mise à jour à un sous-programme distinct, évitant ainsi les contraintes imposées par les déclencheurs.

Exemple de mise en œuvre

-- Stored Procedure to insert rows based on parent product record
CREATE PROCEDURE insert_child_records(
  IN parent_id INT
)
BEGIN
  -- Insert child records for the given parent
  DECLARE child_id INT;
  INSERT INTO child_table (parent_id)
  SELECT child_id FROM child_table WHERE parent_id = parent_id;
  
END // PROCEDURE insert_child_records
Copier après la connexion
-- Trigger to call stored procedure on new parent record
CREATE TRIGGER insert_child_trigger
AFTER INSERT ON parent_table
FOR EACH ROW
BEGIN
  -- Call the stored procedure to insert child records
  CALL insert_child_records(NEW.id);  -- Replace with actual column name
END // TRIGGER insert_child_trigger
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal