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?

Était-ce utile?

La solution

Créer les quatre (4) déclenche sur la table matricielle

suivante
DELIMITER $$   
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 dans OtherInfo après son insertion dans Matrix
  • 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top