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
DDDoriginal
2024-11-02 04:14:02702parcourir

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
-- 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

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:
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