让我们说,我有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
。
如何创建此外键?
答案 0 :(得分:1)
这项工作不是外键可以完成。使用更新触发器,但为了更好地与数据库兼容,请首先对您的代码执行此操作。
触发码:
CREATE TRIGGER SetArticleStatus AFTER UPDATE ON user
FOR EACH ROW
BEGIN
UPDATE `article`
SET status = NEW.status
WHERE uid = NEW.id
END
答案 1 :(得分:0)
由于您的FOREIGN KEY仅为uid
并且不知道status
,因此只能使用外键来完成您想要的事情。对于on-update-trigger来说,这看起来是一个很好的用例。