Java Can';t创建表';basque30.新推荐';(错误编号:150)

Java Can';t创建表';basque30.新推荐';(错误编号:150),java,mysql,sql,jdbc,Java,Mysql,Sql,Jdbc,首先感谢你的帮助和支持。 当我从网上学习MySQL时,我知道我会犯很多错误,并提前感谢您的耐心和理解 我正在用Java做这个项目,然后创建一个MySQL数据库和表。 在我遇到这个问题之前,一切都很顺利。这是迄今为止我最头疼的事。我读了很多关于这个错误的文章。我已经读过,并且我认为我已经完成了错误发生的十个原因 我正在调用的是创建每个表。下面是一些表格,它们涵盖了我遇到的问题 这是工作日历表 private String workCalandar = "CREATE TABLE WorkC

首先感谢你的帮助和支持。 当我从网上学习MySQL时,我知道我会犯很多错误,并提前感谢您的耐心和理解

我正在用Java做这个项目,然后创建一个MySQL数据库和表。 在我遇到这个问题之前,一切都很顺利。这是迄今为止我最头疼的事。我读了很多关于这个错误的文章。我已经读过,并且我认为我已经完成了错误发生的十个原因

我正在调用的是创建每个表。下面是一些表格,它们涵盖了我遇到的问题

这是工作日历表

    private String workCalandar = "CREATE TABLE WorkCalendar ("
        + "WorkCalendarIdNo INT(64) NOT NULL AUTO_INCREMENT,"
        + "WorkCalendarDate Date,"
        + "WorkCalendarDayCount INT(64),"
        + "WorkDayTypeIdNo INT(64),"
        + "PRIMARY KEY(WorkCalendarIdNo),"
        + "FOREIGN KEY(WorkDayTypeIdNo) REFERENCES WorkDayType(WorkDayTypeIdNo)"
        + ")";
这是部门的桌子

    private String department = "CREATE TABLE Department ("
        + "DeptIdNo INT(64) NOT NULL AUTO_INCREMENT,"
        + "DeptName VARCHAR(25),"
        + "PRIMARY KEY(DeptIdNo)"
        + ")";
这是专家桌

    private String specialist = "CREATE TABLE Specialist ("
        + "SpecIdNo INT(64) NOT NULL AUTO_INCREMENT,"
        + "PrefixIdNo INT(64),"
        + "SpecFirstName VARCHAR(30),"
        + "SpecSurname VARCHAR(35),"
        + "SpecDisplayName VARCHAR(72),"
        + "DeptIdNo INT(64),"
        + "PRIMARY KEY(SpecIdNo),"
        + "FOREIGN KEY(PrefixIdNo) REFERENCES Prefix(PrefixIdNo),"
        + "FOREIGN KEY(DeptIdNo) REFERENCES Department(DeptIdNo)"
        + ")";
这是新的推荐表

    private String newReferral = "CREATE TABLE NewReferral("
        + "NewReferralIdNo INT(64) NOT NULL AUTO_INCREMENT,"
        + "PatientNumber VARCHAR(12),"
        + "NewReferralDate Date,"
        + "DeptIdNo INT(64),"
        + "SpecIdNo INT(64),"
        + "NewReferralMatched BOOLEAN,"
        + "WorkCalendarIdNo INT(64),"
        + "PRIMARY KEY(NewReferralIdNo),"
        + "FOREIGN KEY(DeptIdNo) REFERENCES Department(DeptIdNo),"
        + "FOREIGN KEY(SpecIdNo) REFERENCES Specialist(SpecIdNo),"
        + "FOREIGN KEY(WorkCalendarIdNo) REFERENCES WorkCalendar(WorkCalendarIdNo)"
        + ")";
错误是无法创建表“basque30.newreferral”(错误号:150)

我已将错误追溯到下一行

    + "FOREIGN KEY(SpecIdNo) REFERENCES Specialist(SpecIdNo),"

有人能指出我的方法的错误,并建议我如何解决它。

确保引用的表已经存在

Error no: 150 -- There is a wrong primary key reference in your code.

It's due to a reference FOREIGN KEY(SpecIdNo) REFERENCES Specialist(SpecIdNo)
field does not exist.   
正如你提到的

I have tracked the error down to the following line

+ "FOREIGN KEY(SpecIdNo) REFERENCES Specialist(SpecIdNo),"
                                      ↑  
确保表
Specialist
存在,以便在另一个表中作为外键引用。
检查表创建的顺序


没有关系,但将来可能会有所帮助

如果您在服务器上具有管理员权限,那么您可能希望从运行MySQL命令开始

SHOW INNODB STATUS  
对于MySQL 5.5

SHOW ENGINE INNODB STATUS

在收到错误后立即。此命令显示日志信息和错误详细信息

您是否按照此处列出的顺序创建表?感谢Mihai,在调用它们的方法中,我将它们倒置。我的错误。如果你能做出回应,我很乐意给出正确的解决方案。