Frage

Wenn ich ausführen die zwei Abfragen folgen (ich habe sie abgespeckte unbedingt erforderlich):

mysql> CREATE TABLE foo(id INT PRIMARY KEY);
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE TABLE bar ( id INT, ref INT, FOREIGN KEY (ref) REFERENCES foo(id)) ENGINE InnoDB;

Ich erhalte die folgende Fehlermeldung:     ERROR 1005 (HY000): Can not create table './test/bar.frm' (errno: 150)

Wenn das **** ist mein Fehler? Ich habe ihn nicht gefunden, während bei dieser für eine halbe Stunde anstarrte.

War es hilfreich?

Lösung

FOREIGN KEY Constraints

  

Wenn Sie eine Tabelle neu erstellen, das war   Aussetzern, muss es eine Definition haben   das entspricht den Fremdschlüssel   Einschränkungen Referenzierung es. Es muss   haben das Recht, Spaltennamen und -typen,   und es müssen Indizes für die   Schlüssel Bezug genommen wird, wie bereits erwähnt. Wenn   diese sind nicht zufrieden, MySQL Renditen   Fehlernummer 1005 und bezieht sich auf Fehler   150 in der Fehlermeldung.

Mein Verdacht ist, dass es ist, weil Sie nicht foo als InnoDB erstellt haben, wie alles andere in Ordnung aussieht.

Edit: von der gleichen Seite -

  

Beide Tabellen müssen InnoDB-Tabellen sein, und sie müssen nicht nur vorübergehend Tabellen sein.

Andere Tipps

Sie können den Befehl SHOW ENGINE INNODB STATUS verwenden mehr spezifische Informationen über den Fehler zu erhalten.

Es wird Ihnen ein Ergebnis mit einer Status Spalte eine Menge Text enthält.

Suchen Sie den Abschnitt AKTUELLE FOREIGN KEY ERROR genannt, die zum Beispiel könnte wie folgt aussehen:

------------------------
LATEST FOREIGN KEY ERROR
------------------------
190215 11:51:26 Error in foreign key constraint of table `mydb1`.`contacts`:
Create  table `mydb1`.`contacts` with foreign key constraint failed. You have defined a SET NULL condition but column 'domain_id' is defined as NOT NULL in ' FOREIGN KEY (domain_id) REFERENCES domains (id) ON DELETE SET NULL ON UPDATE CASCADE,
    CONSTRAINT contacts_teams_id_fk FOREIGN KEY (team_id) REFERENCES teams (id) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT' near ' ON DELETE SET NULL ON UPDATE CASCADE,
    CONSTRAINT contacts_teams_id_fk FOREIGN KEY (team_id) REFERENCES teams (id) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT'.

einen Fremdschlüssel zu erstellen,

  1. sowohl die Hauptsäule und der Referenzspalte muss gleiche Definition haben.
  2. beide Tabellen Motor muss InnoDB.

Sie können den Motor der Tabelle mit diesem Befehl ändern, nehmen Sie bitte die Sicherung durch, bevor Sie diesen Befehl ausführen.

alter table [Tabellenname] ENGINE = InnoDB;

Ich hatte das gleiche Problem, für diejenigen, die diese auch haben:

Überprüfen Sie den Tabellennamen der referenzierten Tabelle

hatte ich die ‚s‘ am Ende meiner Tabellennamen vergessen

zB Tabelle Client -> Clients

:)

bilden neben vielen anderen Gründen mit MySql Fehler am Ende 150 (während InnoDB verwenden), Eine der wahrscheinlichen Grund ist die undefinierte KEY in der Erklärung der Tabelle erstellen, den Spaltennamen als Fremdschlüssel in der relativen verwiesen enthält Tabelle.

Lassen Sie uns die Mitteilung der Master-Tabelle erstellen sagen ist -

CREATE TABLE 'master_table' (
 'id' int(10) NOT NULL AUTO_INCREMENT,
 'record_id' char(10) NOT NULL,
 'name' varchar(50) NOT NULL DEFAULT '',
 'address' varchar(200) NOT NULL DEFAULT '',
 PRIMARY KEY ('id')
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

und die create Syntax für die relative_table Tabelle, wo der Fremdschlüssel aus Primärtabelle gesetzt ist -

CREATE TABLE 'relative_table' (
 'id' int(10) NOT NULL AUTO_INCREMENT,
 'salary' int(10) NOT NULL DEFAULT '',
 'grade' char(2) NOT NULL DEFAULT '',
 'record_id' char(10) DEFAULT NULL,
 PRIMARY KEY ('id'),
 CONSTRAINT 'fk_slave_master' FOREIGN KEY ('record_id') REFERENCES 'master' ('record_id')
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Dieses Skript wird definitiv mit MySQL-Fehler 150 zu beenden, wenn unter Verwendung von InnoDB.

Um dies zu lösen, müssen wir eine KEY für das die Spalte record_id in der master_table Tabelle hinzufügen und dann in der relative_table Tabelle verweisen als foreign_key verwendet werden.

Schließlich die create-Anweisung für die master_table, wird -

CREATE TABLE 'master_table' (
 'id' int(10) NOT NULL AUTO_INCREMENT,
 'record_id' char(10) NOT NULL,
 'name' varchar(50) NOT NULL DEFAULT '',
 'address' varchar(200) NOT NULL DEFAULT '',
 PRIMARY KEY ('id'),
 KEY 'record_id' ('record_id')
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Ich hatte sehr gleiches Problem und der Grund dafür war die „Kollation“ der Spalten war anders. Einer war latin1, während der andere war UTF-8

Dies kann auch passieren, wenn Sie nicht richtig Spaltennamen nach „Referenzen“ Stichwort gegeben haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top