我有一个内部的应用程序,我整理了,我对SQL非常陌生。

我有一个包含我们大多数数据的表。让我们假装看起来像这样。

Matrix

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

现在,我添加了另一个表格,让我们假装看起来像这样。

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

我已经完成了从Matrix到其他Info的数据的初始副本。人们将在矩阵中添加条目,我希望矩阵中的名称进入另一个innfo表。

基本上,名称字段应始终复制矩阵中的内容。如果在矩阵上更改或删除了某些东西,则应在其他innfo上发生同样的事情。

我该如何设置?

有帮助吗?

解决方案

在矩阵表上创建以下四(4)个触发器

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 ;

每个扳机做什么?

  • matrix_ai 将新名称插入 OtherInfo 将其插入 Matrix
  • matrix_bu 执行验证以确保您不会将旧名称更改为矩阵表中已经存在的新名称
  • matrix_au 将其他Info中的旧名称更新为您在Matrix中更新的新名称
  • matrix_ad 从刚从矩阵中删除的其他信息中删除名称
许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top