2016-11-22 8 views
1

を作成することはできません私は正確に以下のようにデータベースを作りたかった:のMySQL:エラー番号:105は、テーブル

enter image description here

だから私は各テーブルの主キーと外部キーを定義したかったです。

  • "都市" の表は、1本のPK(ID)と1 FK(国番号)を持っている

  • "countrylanguage" テーブルがある2 PK(言語と国番号): はthis回答に基づいて、私はそれを見ました(国番号)

  • "国" の表は、1本のPK(コード)

を持っており、1 FK は、だから私はトンを試してみましたO「予備加熱」のコードにいくつかの魔法を作る:

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コマンドラインクライアントは、二度同じERROR 1005ものがあり、それがテーブルを作成することができないと言う "test.cityを'と' test.countrylanguage ' は説明としてerrno:150のものを使用しています。

私はここで少し調べて、同じタイプ/パラメータ(INT(2)INT(2)NOT NULL)を持たないテーブル要素に関するいくつかの答えを見つけました。私が見ることのできるように、このようなことはここでは起こりません。

私のコーヒー抜き脳はここでは何が欠けていますか?

ありがとうございます。

+0

これをmysqlとsql-serverとタグ付けすることはできません。一つを選択してください – WillardSolutions

+0

私はそれを削除編集しようとしていた。ごめんなさい。 – Coursal

答えて

2

間違っ市とCountryLanguageが、その後TABLE CityをCREATE、最初TABLE Countryを作成し、TABLE Countryが他から参照されているので、TABLE CountryLanguageをCREATE

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

国の表を参照してくださいので、あなたがfirts国を作成する必要がありますsequnceを作成2つのテーブル。

関連する問題