无法在MySQL中创建表:复合外键引用问题求助
问题原因与修复方案
失败原因
proj__rooms的主键是联合主键(name, floor, room),单独的floor、room、name字段都没有唯一约束,无法作为外键的引用目标——数据库要求外键必须指向能唯一标识单条记录的字段(主键或唯一索引)。- 你错误地将三个字段分别设置为独立外键,而不是用联合外键关联目标表的联合主键。
修复后的SQL语句
CREATE TABLE proj__exames( floor NUMERIC(2), room NUMERIC(3), name VARCHAR(40), PRIMARY KEY (floor, room, name), -- 用联合外键关联proj__rooms的联合主键,注意顺序要和目标主键一致 FOREIGN KEY (name, floor, room) REFERENCES proj__rooms (name, floor, room) ON DELETE CASCADE );
补充说明
如果确实需要单独的外键约束(不推荐,会破坏数据一致性),你需要在proj__rooms的单个字段上添加唯一约束,但这不符合你的表设计逻辑——因为floor、room、name是联合唯一的,单独字段本身可能重复。
内容的提问来源于stack exchange,提问作者Duarte GV
相关产品推荐
相关产品推荐

