mysql - 自动更新 MySql 字段

标签 mysql sql

我有 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/

相关文章:

mysql - 如何在 MySQL 中使用子查询呈现两个表的混合结果?

MySql View ,其中一列是表列中的数组

php - 用php标记MySql中的重复项(不删除)

sql - 加入 3 个表 Hibernate & JPA

java - 如何在 Java 中比较 SQL 语句的功能相等?

sql - 在 SQL Server 的 WHERE 子句中使用 DATETIME

php - 日期更新为空

mysql - 如何停止mysqld

mysql - 我可以将中继日志作为 sql 文件播放吗?

mysql - 如何在 MySQL 中为数据库用户定义 SQL 查询白名单?