Maison >base de données >tutoriel mysql >Comment créer un déclencheur pour mettre à jour une colonne dans une autre table basée sur une opération INSERT ?

Comment créer un déclencheur pour mettre à jour une colonne dans une autre table basée sur une opération INSERT ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-24 11:17:13978parcourir

How to Create a Trigger to Update a Column in Another Table Based on an INSERT Operation?

Déclencheur pour mettre à jour la colonne d'une autre table

Dans votre base de données, vous avez trois tables : BookingRequest, status et OccupiedRoom. Vous souhaitez créer un déclencheur qui modifie la colonne d'état de la table BookingRequest à « 1 » chaque fois qu'une demande avec le même ID est ajoutée à la table OccupiedRoom.

Vous avez déjà tenté le déclencheur suivant :

create trigger occupy_trig after insert on OccupiedRoom 
for each row
begin
  if BookingRequest.idRequest= NEW.idRequest
   then
       update BookingRequest
       set status = '1';
       where idRequest = NEW.idRequest;

    end if;
END;

Cependant, cela n’a pas abouti. Voici une version modifiée qui devrait fonctionner :

DELIMITER $$
CREATE TRIGGER occupy_trig
AFTER INSERT ON `OccupiedRoom` FOR EACH ROW
begin
       DECLARE id_exists Boolean;
       -- Check BookingRequest table
       SELECT 1
       INTO @id_exists
       FROM BookingRequest
       WHERE BookingRequest.idRequest= NEW.idRequest;

       IF @id_exists = 1
       THEN
           UPDATE BookingRequest
           SET status = '1'
           WHERE idRequest = NEW.idRequest;
        END IF;
END;
$$
DELIMITER ;

Explication :

  • Le déclencheur est défini après une opération d'insertion sur la table OccupiedRoom.
  • Une variable locale @id_exists est introduite pour vérifier si l'ID demandeur existe dans le BookingRequest table.
  • Une sous-requête est utilisée pour déterminer si une entrée avec l'ID correspondant existe déjà dans la table BookingRequest.
  • Si l'ID existe (@id_exists = 1), la table BookingRequest est mise à jour en définissant status = '1' où idRequest correspond à l'ID de la nouvelle entrée dans OccupiedRoom.
  • N'oubliez pas d'ajuster les noms de table et leur potentiel différences de schéma ou de nom de champ en conséquence.

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