我有 2 个 mysql 表,我想要:
1)当我删除一篇文章时,关联的标签会自动删除
2) 当我添加/删除标签时,文章中的“hasTags”字段会自动更新(0 - 代表 0 个标签,1 - 代表 1+ 个标签)。
对于 1 - 我使用了一个外键并且它有效
ALTER TABLE `articles`
ADD CONSTRAINT `articles_ibfk_1` FOREIGN KEY (`id`) REFERENCES `tags` (`id`) ON DELETE CASCADE;
我不知道第二部分该怎么做。有可能吗?
表格是
articles == id | title | content | hasTags
tags == id | articleId | tagname
谢谢!
最佳答案
对于第 2 部分,您可以在您的应用程序代码中执行此操作,在您还添加/删除标签的部分。
更新,我建议将 hastags
设为引用计数器,这样可以避免@James 提到的问题。
或者您可以创建 3 个触发器:
DELIMITER $$
CREATE TRIGGER ai_tags_each AFTER INSERT ON tags FOR EACH ROW
BEGIN
UPDATE articles SET hasTags = COALESCE(hastags,0) + 1 WHERE id = NEW.article_id;
END $$
CREATE TRIGGER ad_tags_each AFTER DELETE ON tags FOR EACH ROW
BEGIN
UPDATE articles SET hasTags = hasTags - 1 WHERE id = OLD.article_id;
END $$
CREATE TRIGGER au_tags_each AFTER UPDATE ON tags FOR EACH ROW
BEGIN
UPDATE articles SET hasTags = hasTags - 1 WHERE id = OLD.article_id;
UPDATE articles SET hasTags = COALESCE(hastags,0) + 1 WHERE id = NEW.article_id;
END $$
DELIMITER ;
关于mysql - 自动更新 MySql 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8705756/