我通过创建3个表(classes, lectures, taking
)来创建数据库,然后依次更改表以添加foreign key
。
但是,我不断收到以下错误:
ERROR 1822 (HY000): Failed to add the foreign key constraint. Missing index for constraint
我似乎未发现代码有任何问题,所以可能是什么问题?? (我使用的是mySQL Workbench。我尝试将复制和粘贴作为txt文件,因为我虽然可能是排序规则问题,但仍然会出现相同的问题)
代码如下:
CREATE TABLE classes (
course_id VARCHAR(8),
classes_id VARCHAR(10),
semester VARCHAR(10),
year VARCHAR(10),
PRIMARY KEY (course_id, classes_id, semester, year)
);
CREATE TABLE taking (
student_id VARCHAR(8),
course_id VARCHAR(10),
classes_id VARCHAR(10),
semester VARCHAR(10),
year VARCHAR(10),
grade char(1),
PRIMARY KEY (student_id, course_id, semester, year)
);
CREATE TABLE lectures (
professor_id VARCHAR(8),
course_id VARCHAR(10),
classes_id VARCHAR(10),
semester VARCHAR(10),
year VARCHAR(10),
PRIMARY KEY (professor_id, course_id, semester, year)
);
ALTER TABLE taking ADD CONSTRAINT consTAKE3 FOREIGN KEY(classes_id) REFERENCES classes(classes_id) ON DELETE CASCADE;
ALTER TABLE taking ADD CONSTRAINT consTAKE4 FOREIGN KEY(semester) REFERENCES classes(semester) ON DELETE CASCADE;
ALTER TABLE taking ADD CONSTRAINT consTAKE5 FOREIGN KEY(year) REFERENCES classes(year) ON DELETE CASCADE;
ALTER TABLE lectures ADD CONSTRAINT consLEC3 FOREIGN KEY(classes_id) REFERENCES classes(classes_id) ON DELETE CASCADE;
ALTER TABLE lectures ADD CONSTRAINT consLEC4 FOREIGN KEY(semester) REFERENCES classes(semester) ON DELETE CASCADE;
ALTER TABLE lectures ADD CONSTRAINT consLEC5 FOREIGN KEY(year) REFERENCES classes(year) ON DELETE CASCADE;
错误如下:
ERROR 1822 (HY000): Failed to add the foreign key constraint. Missing index for constraint 'consTAKE3' in the referenced table 'classes'
ERROR 1822 (HY000): Failed to add the foreign key constraint. Missing index for constraint 'consTAKE4' in the referenced table 'classes'
ERROR 1822 (HY000): Failed to add the foreign key constraint. Missing index for constraint 'consTAKE5' in the referenced table 'classes'
ERROR 1822 (HY000): Failed to add the foreign key constraint. Missing index for constraint 'consLEC3' in the referenced table 'classes'
ERROR 1822 (HY000): Failed to add the foreign key constraint. Missing index for constraint 'consLEC4' in the referenced table 'classes'
ERROR 1822 (HY000): Failed to add the foreign key constraint. Missing index for constraint 'consLEC5' in the referenced table 'classes'
现在,我正在尝试使用cmd
从ysql –u root –p
执行此操作。尽管如此,同样的问题仍在发生。
答案 0 :(得分:0)
由于所有表中都有一个复合主键,因此所有引用也必须包括表中的所有复合键列才能正确映射。
除非每个表的复合主键列上都有唯一的约束/索引。
要在表中创建关系,请对dbo.taking
进行尝试,对其他表也要采用类似的方法
ALTER TABLE dbo.taking
ADD CONSTRAINT FK_taking_classes
FOREIGN KEY(course_id, classes_id, semester, year) REFERENCES classes(course_id,
classes_id, semester, year)
答案 1 :(得分:-1)
两个表中course_id
的字符长度不同,这导致未创建FK。请在与varchar(8)
相同的taking
表中将其设置为classes
。肯定会解决问题。通过使用提供的查询,我已经创建了表,并且也有FK。
然后遵循上述查询:
由于所有表中都有复合主键,因此所有 引用还必须在 表格以正确映射。
除非您在复合主键上具有唯一的约束/索引 每个表格上的列。
要在表中创建关系,请对
dbo.taking
进行尝试,请按照 其他表也有类似的方法ALTER TABLE dbo.taking ADD CONSTRAINT FK_taking_classes FOREIGN KEY(course_id, classes_id, semester, year) REFERENCES classes(course_id, classes_id, semester, year)