Mysql触发器用于更新涉及多个表的表

时间:2015-11-18 06:43:56

标签: mysql triggers sql-update

我有2个表doclink以及以下结构。

doc - did | inlink | inlinkvalue | outlink | outlinkvalue | pagerank

link - did | linkto didlinkto都有doc.did的外键

我正在尝试创建一个TRIGGER,当链接添加到link表时,inlinkinlinkvaloutlink会自动更新{ {1}}表。

虽然我可以通过以下doc更新inlinkoutlink计数,但无法对TRIGGER进行sql查询。 inlinkval值是inlinkval所有SUM所有文档(outlinkvalue)的链接到此文档的did。我目前的TRIGGER是

DELIMITER $$
CREATE
TRIGGER T_after_link AFTER INSERT 
ON link 
FOR EACH ROW 
BEGIN
UPDATE doc SET outlink=outlink+1 WHERE doc.did=NEW.did;
UPDATE doc SET inlink=inlink+1 WHERE doc.did=NEW.linkto;
END $$
DELIMITER ;

1 个答案:

答案 0 :(得分:1)

对于那些linkto等于插入链接的那些dids,你需要outlinkvalue的总和:

select sum(outlinkvalue) from link inner join doc on link.did=doc.did where link.linkto=NEW.linkto;

将上述查询置于更新中:

update doc set inlinkvalue=(select outlinksum from (select sum(outlinkvalue) as outlinksum from link inner join doc on link.did=doc.did where link.linkto=NEW.linkto) t)

我使用了额外的子查询,因为mysql对于从正在更新的表中进行选择非常繁琐。