2016-11-22 43 views
1

我想作一個數據庫,如下準確:MySQL的:錯誤號:105無法創建表

enter image description here

,所以我想定義每個表的主鍵和外鍵。 基於this答案,我看到:

  • 「城市」 表有1個PK(ID)和1 FK(COUNTRYCODE)

  • 「countrylanguage」 表中有2 PK(語言和COUNTRYCODE) 1 FK (COUNTRYCODE)

  • 「國」 表已經1個PK(代碼)

所以我竭力試圖Ø做出一些神奇的一個「預熱」代碼:

CREATE TABLE `City` (
    `ID` int(11) NOT NULL, 
    `Name` varchar(35) NOT NULL , 
    `CountryCode` varchar(3) NOT NULL DEFAULT '', 
    `District` varchar(20) NOT NULL , 
    `Population` int(11) NOT NULL , 
    PRIMARY KEY(`ID`) , 
    FOREIGN KEY(`CountryCode`) REFERENCES `Country`(`Code`) 
) ; 

CREATE TABLE `CountryLanguage` (
    `CountryCode` varchar(3) NOT NULL DEFAULT '', 
    `Language` varchar(30) NOT NULL , 
    `IsOfficial` varchar(30) NOT NULL , 
    `Percentage` float(4,1) NOT NULL , 
    PRIMARY KEY(`Language`), 
    FOREIGN KEY(`CountryCode`) REFERENCES `Country`(`Code`) 
) ; 

CREATE TABLE `Country` (
    `Code` varchar(3) NOT NULL DEFAULT '', 
    `Name` varchar(52) NOT NULL DEFAULT '', 
    `Continent` varchar(63), 
    `Region` varchar(26) NOT NULL DEFAULT '', 
    `SurfaceArea` float(10,2) NOT NULL DEFAULT '0.00', 
    `IndepYear` smallint(6) DEFAULT NULL, 
    `Population` int(11) NOT NULL DEFAULT '0', 
    `LifeExpectancy` float(3,1) DEFAULT NULL, 
    `GNP` float(10,2) DEFAULT NULL, 
    `GNPOld` float(10,2) DEFAULT NULL, 
    `LocalName` varchar(45) NOT NULL DEFAULT '', 
    `GovernmentForm` varchar(45) NOT NULL DEFAULT '', 
    `HeadOfState` varchar(60) DEFAULT NULL, 
    `Capital` int(11) DEFAULT NULL, 
    `Code2` varchar(2) NOT NULL DEFAULT '', 
    PRIMARY KEY(`Code`) 
) ; 

但我的好醇「mysql命令行客戶端具有相同的錯誤1005兩次的事情,並說,它不能創建表」 test.city '和'test.countrylanguage' 以errno:150作爲解釋。

所以我在這裏搜索了一下,發現了一些關於不具有相同類型/參數(f.e.INT(2)到INT(2)NOT NULL)的表元素的答案。就像我所看到的那樣,這裏沒有發生這種情況。

我在這裏失去了咖啡的大腦是什麼?

非常感謝您提前預約。

+0

這不能被標記爲mysql和sql-server。選一個 – WillardSolutions

+0

我正要編輯刪除它。對不起。 – Coursal

回答

2

錯誤創建sequnce你應該創建firts的國家,因爲城市和CountryLanguage指國表

CREATE TABLE `Country` (
    `Code` varchar(3) NOT NULL DEFAULT '', 
    `Name` varchar(52) NOT NULL DEFAULT '', 
    `Continent` varchar(63), 
    `Region` varchar(26) NOT NULL DEFAULT '', 
    `SurfaceArea` float(10,2) NOT NULL DEFAULT '0.00', 
    `IndepYear` smallint(6) DEFAULT NULL, 
    `Population` int(11) NOT NULL DEFAULT '0', 
    `LifeExpectancy` float(3,1) DEFAULT NULL, 
    `GNP` float(10,2) DEFAULT NULL, 
    `GNPOld` float(10,2) DEFAULT NULL, 
    `LocalName` varchar(45) NOT NULL DEFAULT '', 
    `GovernmentForm` varchar(45) NOT NULL DEFAULT '', 
    `HeadOfState` varchar(60) DEFAULT NULL, 
    `Capital` int(11) DEFAULT NULL, 
    `Code2` varchar(2) NOT NULL DEFAULT '', 
    PRIMARY KEY(`Code`) 
) ; 

    CREATE TABLE `City` (
    `ID` int(11) NOT NULL, 
    `Name` varchar(35) NOT NULL , 
    `CountryCode` varchar(3) NOT NULL DEFAULT '', 
    `District` varchar(20) NOT NULL , 
    `Population` int(11) NOT NULL , 
    PRIMARY KEY(`ID`) , 
    FOREIGN KEY(`CountryCode`) REFERENCES `Country`(`Code`) 
) ; 

CREATE TABLE `CountryLanguage` (
    `CountryCode` varchar(3) NOT NULL DEFAULT '', 
    `Language` varchar(30) NOT NULL , 
    `IsOfficial` varchar(30) NOT NULL , 
    `Percentage` float(4,1) NOT NULL , 
    PRIMARY KEY(`Language`), 
    FOREIGN KEY(`CountryCode`) REFERENCES `Country`(`Code`) 
) ; 
+0

聽起來是對的,因爲外鍵還不存在於原來的 – DontKnow

+0

我正要將其更新爲此。該死的,你們很快!它像創建表的魅力一樣工作,但當我嘗試向它插入元素時,會出現另一個錯誤(錯誤1452(23000):無法添加或更新子行:外鍵約束失敗)。 – Coursal

+0

可能是你正在插入worng實例序列中的值..檢查你的代碼中的邏輯..或發佈一個新的問題與相關的代碼..適當的數據示例和預期的結果 – scaisEdge

3

CREATE TABLE Country,然後再CREATE TABLE City和CREATE TABLE CountryLanguage,因爲表Country由其他參考兩張桌子。