如何使用触发器来更新多个表,这些表从要更新的表中的行中获取特定数据?

时间:2018-08-30 22:48:51

标签: mysql sql mariadb

我已经搜索了很多,但似乎找不到答案。我对MySQL相当陌生,这是我以前作为php脚本编写的用于更新单个表的内容,但是宁愿它在表更改时在数据库上自动更新。

当我通过google脚本更新表时,然后需要按日期从主表中的不同行中更新大约6个不同的表,并且每个表都需要来自不同列的数据。

我知道这不是正确的方法,但是我需要触发器来有效地执行以下操作;

CREATE TRIGGER dash_1 
ON global_summary AFTER UPDATE

UPDATE widget_dash_2 (date, metric)
WHERE inc_id=100 SELECT date, volume 
FROM global_summary
WHERE (`date` = SUBDATE(CURDATE(), 1))
UPDATE widget_dash_2 (date, metric)
WHERE inc_id=101 SELECT date, volume 
FROM global_summary
WHERE (`date` = SUBDATE(CURDATE(), 8))

这将用于表“ global_summary”中的“ volume”列之一,然后我需要添加其他5个更新,例如;

UPDATE widget_dash_3 (date, metric)
WHERE inc_id=100 SELECT date, score 
FROM global_summary
WHERE (`date` = SUBDATE(CURDATE(), 1))
UPDATE widget_dash_3 (date, metric)
WHERE inc_id=101 SELECT date, score 
FROM global_summary
WHERE (`date` = SUBDATE(CURDATE(), 8))

“得分”是表“ global_summary”中的另一列。

任何指导将不胜感激。几天来,我一直在寻找有关此方面的指导,这使我更加困惑。

我假设我需要对数组做一些事情,并且最初要从主表中获取所有数据,但是我该如何处理呢?

@粘性位

不幸的是,我不得不将此数据放入这些小表中,相信我,我宁愿直接将其从global_summary中提取。

CREATE TABLE `global_summary` (
`id` int(11) DEFAULT NULL,
`date` date DEFAULT NULL,
`volume` int(10) DEFAULT NULL,
`volume_problem` int(10) DEFAULT NULL,
`removed` int(10) DEFAULT NULL,
`score` int(10) DEFAULT NULL,
`error` int(10) DEFAULT NULL,
`total` int(10) DEFAULT NULL,
`previous` int(10) DEFAULT NULL,
`entryID` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

所有widget_dash表;

CREATE TABLE `widget_dash_2` (
`inc_id` int(11) NOT NULL,
`date` date DEFAULT NULL,
`metric` int(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

到目前为止,感谢您的反馈,是的,我可能将UPDATE与INSERT混淆了。

0 个答案:

没有答案