Déclencheur MySQL pour mettre à jour la colonne dans une autre table lors de l'insertion
Dans un système de base de données relationnelle, vous pouvez rencontrer le besoin d'effectuer automatiquement une opération sur une table lorsqu'un changement se produit dans une autre table associée. C'est là que les déclencheurs sont utiles. Dans ce cas spécifique, nous visons à créer un déclencheur dans MySQL qui met à jour une colonne de la table BookingRequest lorsqu'une nouvelle ligne est insérée dans la table OccupiedRoom.
Le déclencheur que vous avez présenté tente de mettre à jour la colonne d'état dans la table OccupiedRoom. Table BookingRequest directement après avoir inséré une ligne dans la table OccupiedRoom. Cependant, le problème avec cette approche est que le déclencheur est défini pour s'exécuter pour chaque ligne insérée dans la table OccupiedRoom, ce qui signifie qu'il sera exécuté plusieurs fois si plusieurs lignes sont insérées simultanément. Cela peut entraîner des mises à jour de données incorrectes ou incohérentes.
Pour résoudre ce problème, nous devons modifier le déclencheur pour mettre à jour uniquement la colonne de statut dans la table BookingRequest si une ligne correspondante existe déjà. Voici une version révisée du déclencheur :
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 ;
Ce déclencheur utilise une sous-requête pour vérifier si une ligne correspondante existe dans la table BookingRequest en fonction de la colonne idRequest. Si une ligne correspondante est trouvée, le déclencheur met à jour la colonne d'état sur « 1 ». En incorporant cette vérification, nous garantissons que le déclencheur met à jour uniquement les lignes pertinentes de la table BookingRequest et élimine le risque de mises à jour incorrectes ou en double.
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!