errno 150: Problem mit foreign key
Feluxe
- datenbank
Moin moin. Ich bin am Verzweifeln... beim Anlegen folgender Tabellen bekomme ich einen errno 150 (also ein Problem mit dem foreign key):
//Tabellenstruktur für Tabelle land
mysql_query("CREATE TABLE IF NOT EXISTS land
(
Land\_ID
int(11) NOT NULL auto_increment,
Land\_Name
text NOT NULL,
Landessprache
text,
Waehrung
text,
PRIMARY KEY (Land\_ID
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci AUTO_INCREMENT=8");
//Tabellenstruktur für Tabelle region
mysql_query("CREATE TABLE IF NOT EXISTS region
(
Region\_ID
int(11) NOT NULL auto_increment,
Region\_Name
text NOT NULL,
Region\_Beschreibung
text,
Region\_Sehenswuerdigkeiten
text,
Land\_ID
int(11) NOT NULL,
PRIMARY KEY (Region\_ID
),
INDEX (Land\_ID
),
CONSTRAINT fk\_Land
FOREIGN KEY (Land\_ID
) REFERENCES Land
(Land\_ID
) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci AUTO_INCREMENT=8");
Ich hab schon ne Stunde gegooglet und einige mögliche Lösungen gefunden: Sicherstellen, dass die Datentypen der beiden verknüpften Spalten übereinstimmen (stimmt, beides int(11)). SIcherstellen, dass der gleiche Character Set vorliegt (beides utf-8). Sicherstellen, dass das Fremdschlüssel-Feld indiziert ist (ist es). Mir fällt jetzt nichts mehr ein, woran das liegen könnte... kann mir hier jemand helfen? Gruß, Felix
Hallo,
beim Anlegen folgender Tabellen bekomme ich einen errno 150 (also ein Problem mit dem foreign key):
mit folgenden Anweisungen (PHP-Kram entfernt)
CREATE TABLE IF NOT EXISTS land
(
Land_ID
int(11) NOT NULL auto_increment,
Land_Name
text NOT NULL,
Landessprache
text,
Waehrung
text,
PRIMARY KEY (Land_ID
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci AUTO_INCREMENT=8
»~~~sql
CREATE TABLE IF NOT EXISTS `region` (
> `Region_ID` int(11) NOT NULL auto_increment,
> `Region_Name` text NOT NULL,
> `Region_Beschreibung` text,
> `Region_Sehenswuerdigkeiten` text,
> `Land_ID` int(11) NOT NULL,
> PRIMARY KEY (`Region_ID`),
> INDEX (`Land_ID`),
> CONSTRAINT `fk_Land` FOREIGN KEY (`Land_ID`) REFERENCES `Land` (`Land_ID`) ON DELETE CASCADE ON UPDATE CASCADE
> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci AUTO_INCREMENT=8
kann ich Dein Problem mit MySQL 5.0.51 nicht nachvollziehen.
Die Tabellen lassen sich problemlos anlegen, sowohl mit MySQL-Query-Browser
als auch mit dem mysql-Kommandozeilenclient.
Frage:
Warum verwendest Du für Deine Spalten den Datentyp TEXT statt VARCHAR(geeignete Länge)?
Freundliche Grüße
Vinzenz
Hello,
kann ich Dein Problem mit MySQL 5.0.51 nicht nachvollziehen.
Die Tabellen lassen sich problemlos anlegen, sowohl mit MySQL-Query-Browser
als auch mit dem mysql-Kommandozeilenclient.
verdammt, da war einer 30sekunden schneller...
MfG
Rouven
Hallo,
beim Anlegen folgender Tabellen bekomme ich einen errno 150 (also ein Problem mit dem foreign key):
mit folgenden Anweisungen (PHP-Kram entfernt)
CREATE TABLE IF NOT EXISTS land
(
Land_ID
int(11) NOT NULL auto_increment,
Land_Name
text NOT NULL,
Landessprache
text,
Waehrung
text,
PRIMARY KEY (Land_ID
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci AUTO_INCREMENT=8
>
> »~~~sql
CREATE TABLE IF NOT EXISTS `region` (
> > `Region_ID` int(11) NOT NULL auto_increment,
> > `Region_Name` text NOT NULL,
> > `Region_Beschreibung` text,
> > `Region_Sehenswuerdigkeiten` text,
> > `Land_ID` int(11) NOT NULL,
> > PRIMARY KEY (`Region_ID`),
> > INDEX (`Land_ID`),
> > CONSTRAINT `fk_Land` FOREIGN KEY (`Land_ID`) REFERENCES `Land` (`Land_ID`) ON DELETE CASCADE ON UPDATE CASCADE
> > ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci AUTO_INCREMENT=8
kann ich Dein Problem mit MySQL 5.0.51 nicht nachvollziehen.
Die Tabellen lassen sich problemlos anlegen, sowohl mit MySQL-Query-Browser
als auch mit dem mysql-Kommandozeilenclient.
Dazu muss ich sagen, dass die Anweisungen bei meinem lokalen Webserver (xampp Distribution) ebenfalls einwandfrei funktionieren. MySQL-Version kann ich grad nicht nachgucken, ist aber eine 5.0.x. Probleme gab es erst, als ich die Tabellen in einer MySQL-Datenbank auf meinem gemieteten Webspace erzeugen wollte. Vielleicht liegt das also einfach an merkwürdigen Einstellungen beim Hoster...?
Frage:
Warum verwendest Du für Deine Spalten den Datentyp TEXT statt VARCHAR(geeignete Länge)?
Weil da ziemlich lange Texte in die Spalten reinkommen (Beschreibungen eben). Die Länge ist da vorher nicht abzuschätzen... ansonsten gibts dafür keinen besonderen Grund. Hat denn der Datentyp TEXT irgendwelche Nachteile?
Freundliche Grüße
Vinzenz
Gruß, Felix