Domanda

Ho un'applicazione in-house che ho messo insieme, e io sono molto nuovo a SQL in generale.

Ho una tabella che contiene la maggior parte dei nostri dati. Facciamo finta che assomiglia a questo.

Matrix

|Name       | Description        |
----------------------------------
|Server01   | First Server       | 

Ora ho aggiunto un altro tavolo e facciamo finta che assomiglia a questo.

OtherInfo
|Name       | Price              |
----------------------------------
|Server01   | 100                |

Ho fatto una copia iniziale dei dati da Matrix a OtherInfo. La gente sarà l'aggiunta di voci di Matrix, e voglio che il nome da Matrix per andare nella tabella OtherInfo.

In sostanza, il campo Nome deve sempre replicare ciò che è in Matrix. Se qualcosa viene modificata o cancellata su Matrix, la stessa cosa dovrebbe accadere in OtherInfo.

Come faccio a impostare questo?

È stato utile?

Soluzione

Creare la seguente quattro (4) Trigger sul tavolo Matrix

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 ;

Che cosa fa ogni trigger fare?

  • Inserisce matrix_ai il nuovo nome in OtherInfo dopo che è stato inserito nella Matrix
  • esegue matrix_bu una convalida per assicurarsi che non si cambia il vecchio nome in un nome nuovo che già esiste nella tabella di Matrix
  • Aggiornamenti matrix_au il vecchio nome in OtherInfo per il nuovo nome aggiornati in Matrix
  • cancella matrix_ad il Nome da OtherInfo che appena eliminata da Matrix
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top