Pregunta

Tengo una aplicación interna que he reunido, y soy muy nuevo en SQL en general.

Tengo una tabla que contiene la mayoría de nuestros datos. Finger que se vea así.

Matrix

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

Ahora agregué otra mesa y fingamos que se ve así.

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

He hecho una copia inicial de los datos de Matrix a OtherInfo. La gente agregará entradas a Matrix, y quiero que el nombre de la matriz entre en la tabla OtroInfo.

Básicamente, el campo de nombre siempre debe replicar lo que está en Matrix. Si algo se cambia o se elimina en Matrix, lo mismo debería suceder en OtherInfo.

¿Cómo configuro esto?

¿Fue útil?

Solución

Cree los siguientes cuatro (4) desencadenantes en la tabla de matriz

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é hace cada disparador?

  • matrix_ai Inserta el nuevo nombre en OtherInfo Después de que se inserta en Matrix
  • matrix_bu Realiza una validación para asegurarse de no cambiar el nombre antiguo en un nuevo nombre que ya existe en la tabla de matriz
  • matrix_au Actualiza el nombre anterior en OtroInfo al nuevo nombre que actualizó en Matrix
  • matrix_ad Elimina el nombre de OtherInfo que acabas de eliminar de Matrix
Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top