mysql - 添加带有更新级联的外键

标签 mysql sql foreign-keys

假设我有 2 张 table

用户

+----+--------+
| id | status |
+----+--------+
|  1 | A      |
|  2 | A      |
+----+--------+

文章

+----+-----+--------+
| id | uid | status |
+----+-----+--------+
|  1 |   1 | A      |
|  2 |   2 | A      |
|  3 |   2 | A      |
|  4 |   2 | A      |
|  5 |   1 | A      |
|  6 |   2 | A      |
|  7 |   2 | A      |
|  8 |   1 | A      |
|  9 |   2 | A      |
| 10 |   2 | A      |
+----+-----+--------+

如果运行此查询,如何添加外键:

UPDATE user SET status='B' WHERE id=1 OR id=2;

结果将是:

用户

+----+--------+
| id | status |
+----+--------+
|  1 | B      |
|  2 | B      |
+----+--------+

文章

+----+-----+--------+
| id | uid | status |
+----+-----+--------+
|  1 |   1 | B      |
|  2 |   2 | B      |
|  3 |   2 | B      |
|  4 |   2 | B      |
|  5 |   1 | B      |
|  6 |   2 | B      |
|  7 |   2 | B      |
|  8 |   1 | B      |
|  9 |   2 | B      |
| 10 |   2 | B      |
+----+-----+--------+

或者换句话说,如果我更新列user.status,MySQL将自动使用相应的值更新列article.status

如何创建这个外键?

最佳答案

该工作不是外键可以完成的。使用更新触发器,但为了更好的数据库兼容性,最好对您的代码执行此操作。

触发代码:

CREATE TRIGGER SetArticleStatus AFTER UPDATE ON user 
FOR EACH ROW 
BEGIN 
UPDATE `article` 
   SET status = NEW.status 
 WHERE uid = NEW.id
END 

关于mysql - 添加带有更新级联的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26378895/

相关文章:

php - 使用 PDO 修改 MySQL 表中的整数

mysql - 具有可为空外键的数据库表

php - php中先序树遍历算法的问题

c# - 我可以从 MySql 触发器检索 Asp.net session 吗

mysql - 用于存储用户多种爱好的关系数据库结构

sql - 根据变量/查询结果选择列的优雅方法?

sql - 为什么这两个 sql 查询的输出不同?

sql - 简化 PostgreSQL 函数

django - 如何让 Django-Piston 在序列化输出中包含相关的子对象?

mysql - 同一表和组的多个外键