繁体   English   中英

在更新级联上添加外键

[英]add foreign key with on update cascade

假设我有2张桌子

用户

+----+--------+
| 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 

由于您的FOREIGN KEY只是uid ,并且不了解status因此仅使用外键就无法完成您想要的事情。 对于更新触发,这似乎是一个很好的用例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM