2017-10-19 71 views
0

我不确定,我错过了什么?无论我多么努力地尝试改变价值观,它总是给我同样的错误。顺便说一下,这个数据库是通过Java代码完成的。这是第一个表:为什么我得到errno:150“外键约束不正确”?

第一个表(表名= DoctorsDetails)

sql = "CREATE TABLE IF NOT EXISTS " + tableName + 
     " (doctor_id INT not NULL AUTO_INCREMENT UNIQUE,"+ 
     " first_name VARCHAR(50)," + 
     " mid_name VARCHAR(50)," + 
     " last_name VARCHAR(50)," + 
     " tel VARCHAR(32)," + 
     " fax VARCHAR(32)," + 
     " email VARCHAR(40)," + 
     " agenda TEXT," + 
     " PRIMARY KEY (doctor_id))" + 
     " ENGINE=InnoDB DEFAULT CHARSET=utf8"; 

这是第二个表(表名=学生):

sql = "CREATE TABLE IF NOT EXISTS " + tableName + 
     " (student_id INT NOT NULL AUTO_INCREMENT UNIQUE," + 
     " first_name VARCHAR(50)," + 
     " mid_name VARCHAR(50)," + 
     " last_name VARCHAR(50)," + 
     " age INT(50)," + 
     " class INT(11)," + 
     " gender CHAR(1)," + 
     " doctor_id INT," + 
     " diseases SET('a', 'b', 'c', 'd')," + // TODO: replace the values in set with real 
     " more_info TEXT," + 
     " height INT(255)," + 
     " weight INT(255)," + 
     " waist INT(255)," + 
     " appointment VARCHAR(50)," + 
     " PRIMARY KEY (student_id)," + 
     " CONSTRAINT FK_StudentDoctor"+ 
     " FOREIGN KEY(doctor_id) REFERENCES doctors(doctor_id))" + 
     " ENGINE=InnoDB DEFAULT CHARSET=utf8"; 

难道你们去翻它?我一直在寻找它2天,无法弄清楚为什么我得到这个错误。 2年前,我从未学习过MySQL。 MySQL中有东西改变了吗?

回答

1

您的第一个表名是DoctorsDetails,因此您的第二个表的外键子句应如下所示。

FOREIGN KEY(doctor_id) REFERENCES DoctorsDetails(doctor_id) 
+0

OMG我怎么没有发现....我觉得如此转储:/我一直在玩这个数据库从昨天 –

0

你有一个表称为DoctorsDetails和另一再次呼吁DoctorsDetails?这是我从你的代码中看到的。您只需使用“DoctorsDetails”的值声明一个变量tableName

1-第二个表格必须有另一个名称。
2-您应用于第二个表的外键必须引用具有您引用的主键的现有表。而且他们的数据类型也必须相同。

+0

刷新页面,它不是真正的表的名称。我已经在我的java代码中将其声明在上面的其他地方,并忘记将其包含在此。对不起,我编辑了我的评论。 –

相关问题