Comment configurer les déclencheurs de MySQL pour la copie d'un champ
Question
J'ai une application en interne que j'ai mis ensemble, et je suis très nouveau à SQL en général.
J'ai une table qui contient la plupart de nos données. Feignons ça ressemble à ça.
Matrix
|Name | Description |
----------------------------------
|Server01 | First Server |
Maintenant, je l'ai ajouté une autre table et Feignons ça ressemble à ça.
OtherInfo
|Name | Price |
----------------------------------
|Server01 | 100 |
Je l'ai fait une copie initiale des données de Matrix à OtherInfo. Les gens seront ajouter des entrées Matrix, et je veux le nom de la matrice pour entrer dans le tableau OtherInfo.
En fait, le champ Nom doit toujours reproduire ce qui est dans Matrix. Si quelque chose est modifié ou supprimé sur Matrix, la même chose devrait se produire sur OtherInfo.
Comment puis-je régler cela?
La solution
Créer les quatre (4) déclenche sur la table matricielle
suivanteDELIMITER $$
CREATE TRIGGER matrix_ai AFTER INSERT ON Matrix FOR EACH ROW
BEGIN
INSERT IGNORE INTO OtherInfo (Name) VALUES (NEW.Name);
END; $$
CREATE TRIGGER matrix_bu BEFORE UPDATE ON Matrix FOR EACH ROW
BEGIN
DECLARE found_key,dummy INT;
SELECT COUNT(1) INTO found_key FROM Matrix WHERE Name = NEW.Name;
IF found_key = 1 THEN
-- Abandon the Trigger of Name already exists
SELECT data_length INTO dummy FROM information_schema.tables;
END IF;
END; $$
CREATE TRIGGER matrix_au AFTER UPDATE ON Matrix FOR EACH ROW
BEGIN
UPDATE OtherInfo SET Name=NEW.Name WHERE Name=OLD.Name;
END; $$
CREATE TRIGGER matrix_ad AFTER DELETE ON Matrix FOR EACH ROW
BEGIN
DELETE FROM OtherInfo WHERE Name=OLD.Name;
END; $$
DELIMITER ;
Qu'est-ce que chaque déclencheur faire?
-
matrix_ai
INSERTs le nouveau nom dansOtherInfo
après son insertion dansMatrix
-
matrix_bu
effectue une validation pour vous assurer de ne pas modifier l'ancien nom dans un nouveau nom qui existe déjà dans la table matrice -
matrix_au
UPDATEs l'ancien nom dans OtherInfo au nouveau nom dans Matrix vous mis à jour -
matrix_ad
supprime le nom dans OtherInfo que vous venez de supprimer de Matrix