如何在Wedstrijd表上创建Speler与Wedstrijd的外键约束?解决两表均加键问题
正确实现Speler与Wedstrijd表的外键约束(外键位于Wedstrijd表)
你刚才的操作完全搞反了外键的关系方向,咱们一步步来纠正:
先理清核心逻辑
外键约束的本质是:包含外键的子表字段,必须引用父表的主键。你的需求是外键放在Wedstrijd表,所以Wedstrijd是子表,需要用它的某个字段关联Speler表的主键idSpeler。
第一步:清理错误的外键(如果还存在)
你之前执行的语句把外键加在了Speler表,这完全不符合需求,先把它删掉:
- 先查询Speler表上错误外键的名称(以MySQL为例):
SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = 'Speler' AND REFERENCED_TABLE_NAME = 'Wedstrijd';
- 用查询到的约束名删除外键:
ALTER TABLE Speler DROP FOREIGN KEY 你的约束名;
第二步:添加正确的外键约束
情况1:Wedstrijd表还没有关联字段
如果Wedstrijd表中没有用来存储Speler ID的字段,先添加这个字段(注意字段类型要和Speler表的idSpeler完全一致,比如INT、VARCHAR(20)等):
ALTER TABLE Wedstrijd ADD COLUMN idSpeler INT; -- 替换成和idSpeler匹配的类型
情况2:正式添加外键约束
现在给Wedstrijd表的idSpeler字段添加外键,关联到Speler表的主键:
ALTER TABLE Wedstrijd ADD FOREIGN KEY (idSpeler) REFERENCES Speler(idSpeler);
这样操作后,外键就正确建立在Wedstrijd表了,它会确保Wedstrijd表中的idSpeler值必须是Speler表中已存在的idSpeler值,实现数据的一致性约束。
内容的提问来源于stack exchange,提问作者Henk Disser
相关产品推荐
相关产品推荐

