2016-11-22 7 views
1

Ich wollte eine Datenbank genau wie unten machen:MySQL: errno: 105 kann nicht Tabelle erstellen

enter image description here

So wollte ich die Primär- und Fremdschlüssel für jede Tabelle definieren. Basierend auf this Antwort, sah ich, dass:

  • "Stadt" Tabelle hat 1 PK (ID) und 1 FK (Länderkennung)

  • "countrylanguage" Tabelle hat 2 PK (Sprache und Länderkennung) und 1 FK (Länderkennung)

  • "Land" Tabelle hat 1 PK (Kodex)

So versuchte ich t o etwas Magie auf einem „vorgewärmten“ Code machen:

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`) 
) ; 

aber mein good ol ‚mysql Kommandozeilen-Client die gleiche ERROR 1005 Sache zweimal, und sagt, dass es keine Tabellen erstellen‘ test.city 'und' test.countrylanguage ' mit dem errno: 150 thingy als eine Erklärung.

Also habe ich hier ein wenig gesucht und ich habe einige Antworten bezüglich der Tabellenelemente gefunden, die nicht denselben Typ/Parameter haben (zB INT (2) bis INT (2) NOT NULL). Soweit ich sehen konnte, passiert hier nichts dergleichen.

Was ist mein Kaffee-drained Gehirn fehlt hier?

Vielen Dank für Ihre Zeit im Voraus.

+0

Dies kann nicht als mysql und sql-Server markiert werden. Wählen Sie eine – WillardSolutions

+0

Ich war dabei, eine Bearbeitung zu machen, um es zu entfernen. Es tut mir Leid. – Coursal

Antwort

2

falsch sequnce erstellen Sie sollten firts Land schaffen, weil Stadt und CountryLanguage zu Land siehe Tabelle

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

Klingt richtig, da der Fremdschlüssel im Original noch nicht existiert – DontKnow

+0

Ich war gerade dabei, es zu aktualisieren. Verdammt, ihr seid schnell! Es funktioniert wie ein Zauber, der die Tabellen erzeugt, aber während ich versuche, Elemente einzufügen, kommt ein weiterer Fehler auf (ERROR 1452 (23000): kann keine untergeordnete Zeile hinzufügen oder aktualisieren: eine Fremdschlüsseleinschränkung schlägt fehl). – Coursal

+0

könnte sein, dass Sie den Wert in der worng Instanz Sequenz einfügen .. überprüfen Sie die Logik in Ihrem Code .. oder eine neue Frage mit verwandten Code .. richtige Daten Beispiel und erwartetes Ergebnis – scaisEdge

3

CREATE TABLE Country zuerst, dann CREATE TABLE City und CREATE TABLE CountryLanguage, da TABLE Country durch das andere verwiesen wird zwei Tische.

Verwandte Themen