Frage

mysql> ALTER TABLE category ADD CONSTRAINT category_parent_category_id FOREIGN KEY (parent) REFERENCES category(id);
ERROR 1005 (HY000): Can't create table 'sfnews.#sql-244_1' (errno: 150)

DDL wie folgt:

Create Table: CREATE TABLE `category` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `parent` bigint(20) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`),
  KEY `parent_idx` (`parent`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

Warum ist es falsch?

War es hilfreich?

Lösung

Selbst Referenz sollte möglich sein. Es ist, weil „Eltern“ nicht signiert ist und „id“ ist es nicht. Ändern Sie die Tabellendefinitionen id Spalte

 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,

und es wird funktionieren.

Die Referenz Staaten über Fremdschlüssel:

„die Größe und die Zeichen der integer-Typen gleich sein müssen“

Es scheint das gleiche Problem beschrieben hier

Andere Tipps

Wenn Sie den Status der InnoDB-Engine (SHOW ENGINE InnoDB STATUS) überprüfen, werden Sie eine ausführlichere Erklärung bekommen:

  

AKTUELLE FOREIGN KEY ERROR

     

[...]

     

Es kann keinen Index in der referenzierten Tabelle finden, wo die referenzierten Spalten als die ersten Spalten angezeigt werden, oder Spaltentypen in der Tabelle und die referenzierte Tabelle für Constraint nicht übereinstimmen.

Jetzt id nicht signiert.

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