2017-10-19 72 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代碼中將其聲明在上面的其他地方,並忘記將其包含在此。對不起,我編輯了我的評論。 –

相關問題