【发布时间】:2013-11-25 13:27:37
【问题描述】:
MySQL 不断返回“无法添加外键约束”。
在重新制作之前,每次执行都会删除这些表。
目前,在制作完所有表格后,我尝试更改表格以包含外键;我尝试在创建表时添加键,但程序返回相同的错误。
我确信被引用的每一列也具有相同的值。
CREATE TABLE utopia.student (id_student VARCHAR(6) NOT NULL,
Student_Name VARCHAR(45) NOT NULL, Degree VARCHAR(45) NOT NULL,
PRIMARY KEY (id_student));
-- Create Student Table
CREATE TABLE utopia.module (id_module VARCHAR(6) NOT NULL,
Module_Name VARCHAR(45) NOT NULL, Credits Int NOT NULL,
PRIMARY KEY (id_module));
-- Create Module Table
CREATE TABLE utopia.registered (id_student VARCHAR(6) NOT NULL,
id_module VARCHAR(6) NOT NULL, PRIMARY KEY (id_student, id_module));
-- Create Registered Table
CREATE TABLE utopia.staff (id_staff VARCHAR(6) NOT NULL,
Staff_Name VARCHAR(45) NOT NULL, Grade VARCHAR(45) NOT NULL,
PRIMARY KEY (id_staff));
-- Create Staff Table
CREATE TABLE utopia.teaches (id_staff VARCHAR(6) NOT NULL,
id_module VARCHAR(6) NOT NULL, PRIMARY KEY (id_staff, id_module));
-- Create Teaches Table
ALTER TABLE utopia.student ADD FOREIGN KEY (id_student)
REFERENCES registered(id_student);
ALTER TABLE utopia.module ADD FOREIGN KEY (id_module)
REFERENCES registered(id_module);
ALTER TABLE utopia.registered ADD FOREIGN KEY (id_student)
REFERENCES student(id_student),
ADD FOREIGN KEY (id_module)
REFERENCES module(id_module);
ALTER TABLE utopia.staff ADD FOREIGN KEY idstaff REFERENCES teaches(id_staff);
ALTER TABLE utopia.teaches ADD FOREIGN KEY (id_staff) REFERENCES staff(id_staff),
ADD FOREIGN KEY (id_module) REFERENCES module(id_module);
任何关于该主题的建议/教程将不胜感激
【问题讨论】:
-
哪个 MySQL 版本?哪个存储引擎:MyISAM 还是 INNODB?
-
我认为你的外键是向后的。
registered需要到student的外键和到module的另一个外键。您的示例试图将外键放在错误的表上。有道理?换句话说,哪个先出现:student或registered?由于student记录首先出现,registered有一个外键指向学生。
标签: mysql foreign-keys