题
我有一个内部的应用程序,我整理了,我对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
从刚从矩阵中删除的其他信息中删除名称
不隶属于 dba.stackexchange