mysql - 为来自两个不同表的两个外键声明外键约束
问题描述
我想分别为来自两个不同表 student 和 subject 的两个外键 student_id 和 subject_id 声明约束“fk”。
我已经尝试了以下但它不起作用
约束 fk 外键(subject_id)和外键(student_id)引用主题(subject_id)和学生(student_id)
我不能使用两个约束,这就是我面临这个问题的原因。它必须是“fk”。
解决方案
您需要使用两个外键:
MySQL / Oracle 设置:
CREATE TABLE student ( student_id INT PRIMARY KEY );
CREATE TABLE subject ( subject_id INT PRIMARY KEY );
创建表:
CREATE TABLE your_table2 (
subject_id INT,
student_id INT,
CONSTRAINT your_table2__subject_id__fk FOREIGN KEY ( subject_id ) REFERENCES subject ( subject_id ),
CONSTRAINT your_table2__student_if__fk FOREIGN KEY ( student_id ) REFERENCES student ( student_id )
)
或者,在 Oracle 中,您还可以使用内联约束:
CREATE TABLE your_table (
subject_id INT CONSTRAINT your_table__subject_id__fk REFERENCES subject ( subject_id ),
student_id INT CONSTRAINT your_table__student_if__fk REFERENCES student ( student_id )
)
我想分别为来自两个不同表 student 和 subject 的两个外键 student_id 和 subject_id 声明约束“fk”。
您不能声明引用两个表的单个外键约束;该语法要求您只引用一个表。
我想,在Oracle中,您可以在要引用的两个表的交叉连接上创建一个物化视图,并在student_id
andsubject_id
列上创建一个复合主键,然后在外键而不是基础表中引用材料视图,但是这似乎是解决问题的一种过于复杂的方法。相反,当预期的解决方案是使用两个外键时,您应该反对只使用一个外键的要求。
推荐阅读
- c - 如何从 C 中的结构中复制字符?
- c++ - 使用带有派生类作为参数的 std::function 和 std:bind 的事件管理器的 C++ 回调
- c - 一般来说,我应该/是否应该在 C 中转换一个 void 指针?
- php - 如何在多列中设置文本?
- c# - 调用 ClassA.Method() 作为 ClassB.Method() 但只影响 ClassA 值,两个类都派生自同一个 BaseClass
- django - 如何将 django 表单错误作为文本而不是 html?
- dask - GKE 上的 dask-kubernetes 零工人
- blender - 搅拌机 2.8 UV 展开扭曲
- php - PHP - 多个 Api 调用 - 响应时间超过 15 秒?
- python - 如何返回不在列表中的键?