我承認這已在這裏多次提出,並且我已經瀏覽了很多答案。對於CREATE TABLE MySQL Errno 150(不正確的外鍵)
我知道errno150指的是一個帶有不正確外鍵的表,並且我見過以前的答案here。我已經檢查了所有的情況,但無法弄清楚。不知道我是否錯過了一些明顯的東西。
這是使用MySQL的java的implentation,我已經創建兩個表(目前)switch語句,像這樣:
//Creates the table with the name given to the function and adds all fields & keys
switch(tableName){
case "Address":
stmt.executeUpdate("CREATE TABLE Address(houseNo INT(4) NOT NULL, "
+ "firstLine VARCHAR(30) NOT NULL, "
+ "secondLine VARCHAR(30), "
+ "city VARCHAR(25) NOT NULL, "
+ "county VARCHAR(25) NOT NULL, "
+ "postCode VARCHAR(7) NOT NULL, "
+ "PRIMARY KEY (houseNo, postCode))");
break;
case "Patient":
stmt.executeUpdate("CREATE TABLE Patient(patientID INT(8) NOT NULL PRIMARY KEY AUTO_INCREMENT, "
+ "title VARCHAR (10) NOT NULL, "
+ "forename VARCHAR(15) NOT NULL, "
+ "surname VARCHAR(25) NOT NULL, "
+ "dob DATE NOT NULL, "
+ "phoneNo CHAR(11) NOT NULL, "
+ "houseNo INT(4) NOT NULL, "
+ "postCode VARCHAR(7) NOT NULL, "
+ "amountOwed DECIMAL(5,2) NOT NULL, "
+ "FOREIGN KEY (houseNo) REFERENCES Address (houseNo), "
+ "FOREIGN KEY (postCode) REFERENCES Address (postCode))");
break;
}
地址創建優良(無外鍵),患者給予errno150 。相同的引擎,相同的字符集,相同的數據類型(甚至可以複製粘貼以100%確定),新創建(空)表,這兩個表都是非臨時的。
謝謝。
P.S.我無法使用SHOW ENGINE INNODB STATUS
,因爲我沒有足夠高的權限級別。
完整的錯誤消息:
java.sql.SQLException: Can't create table 'team.Patient' (errno: 150)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3970)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3906)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2524)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2677)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2545)
at com.mysql.jdbc.StatementImpl.executeUpdateInternal(StatementImpl.java:1540)
at com.mysql.jdbc.StatementImpl.executeLargeUpdate(StatementImpl.java:2595)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1468)
at uk.team.App.makeTable(App.java:146)
at uk.team.App.setupEnviro(App.java:80)
at uk.team.App.access$1(App.java:45)
at uk.team.App$1.run(App.java:33)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
可以粘貼整個錯誤?你在mysql命令行上得到了什麼? – Jordon
@ShivaShinde它是通過Java創建的,我可以在原始文章中添加完整的錯誤。 –
請添加整個錯誤! – Jordon