Frage

Ich habe eine interne Anwendung, die ich zusammengestellt habe, und ich bin im Allgemeinen sehr neu in SQL.

Ich habe eine Tabelle, die die meisten unserer Daten enthält. Stellen wir uns so aus, als ob es so aussieht.

Matrix

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

Jetzt habe ich einen weiteren Tisch hinzugefügt und so tun, als ob es so aussieht.

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

Ich habe eine erste Kopie von Daten von Matrix zu einem anderenInfo durchgeführt. Die Leute werden Matrix Einträge hinzufügen, und ich möchte, dass der Name aus der Matrix in die andereInfo -Tabelle geht.

Grundsätzlich sollte das Namen des Namens immer replizieren, was sich in der Matrix befindet. Wenn etwas auf Matrix geändert oder gelöscht wird, sollte das Gleiche auf anderen INFO passieren.

Wie richte ich das ein?

War es hilfreich?

Lösung

Erstellen Sie die folgenden vier (4) Auslöser auf der Matrixtabelle

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 ;

Was macht jeder Auslöser?

  • matrix_ai Fügt den neuen Namen in ein OtherInfo Nachdem es eingefügt wurde in Matrix
  • matrix_bu führt eine Validierung durch, um sicherzustellen, dass Sie den alten Namen nicht in einen neuen Namen ändern, der bereits in der Matrix -Tabelle vorhanden ist
  • matrix_au Aktualisiert den alten Namen in einem anderenInfo auf den neuen Namen, den Sie in Matrix aktualisiert haben
  • matrix_ad Löscht den Namen von einem anderenInfo, den Sie gerade aus der Matrix gelöscht haben
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top