2013-10-18 64 views
1

首先感謝您的幫助和支持的話。 當我從網上學習MySQL時,我知道我會犯很多錯誤,並提前感謝您的耐心和理解。無法創建表'basque30.newreferral'(errno:150)

我正在創建基於Java的項目,然後創建一個MySQL數據庫和表。 一般來說,它很順利,直到我遇到這個問題。迄今爲止,它給了我最大的麻煩。我讀了很多關於錯誤150的文章。我讀過error 150 on MySQL site,我認爲我已經完成了錯誤150發生的十個原因。

我正在調用的調用是創建每個表。以下是一些覆蓋我遇到的問題的表格。

這是WorkCalendar表

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)" 
     + ")"; 

這是NewReferral表

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)," 

有人能指出錯誤我的方式,並告訴我如何解決它。

+0

您是按照此處列出的順序創建表格嗎? – Mihai

+0

感謝Mihai,在他們被調用的方法中,我讓他們倒過來了。我的錯。如果您可以創建回覆,我會很樂意將其作爲正確的解決方案。 –

回答

1

確保引用的表已存在。

1
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 

收到該錯誤後立即啓動。此命令顯示日誌信息和錯誤詳細信息

相關問題