1

我正在尝试在 MYSQL 中实现一个简单的产品系统,其中一个产品可以有很多评论。引用产品表的注释表中有一个外键product_id。我想将产品的评论数量存储为产品表中的一个字段以进行排序。可以通过像这样在评论表上创建两个触发器来实现

DELIMITER $$
CREATE TRIGGER comment_incr_trig
AFTER INSERT ON `COMMENT` FOR EACH ROW
begin
    UPDATE PRODUCT SET NUM_OF_COMMENT = NUM_OF_COMMENT + 1 WHERE ID = NEW.PRODUCT_ID;
END;
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER comment_decr_trig
AFTER DELETE ON `COMMENT` FOR EACH ROW
begin
    UPDATE PRODUCT SET NUM_OF_COMMENT = NUM_OF_COMMENT - 1 WHERE ID = OLD.PRODUCT_ID;
END;
$$
DELIMITER ;

但是,MYSQL中有没有什么机制可以直接将父表中的一个字段绑定到子表的个数而不使用触发器呢?

非常感谢。

4

1 回答 1

0

我一般会建议不要存储此类派生信息。您可以在需要时轻松地在查询中即时计算。

为了避免再次重复输入相同的查询,一种解决方案是创建一个视图:

create view product_view(id, num_of_comments) as
select
    p.id,
    c.num_of_comments
from product p
left join (
    select product_id, count(*) num_of_comments
    from comment
    group by product_id
) c on c.product_id = p.id

您可以使用来自product表的更多列来扩展视图(我无法添加更多,因为您的问题中显示的唯一列是product(id))。

于 2020-02-18T09:16:46.763 回答