Frage

Der Fehler ist: Tabelle kann nicht c.handsets erstellen

Wie finde ich das Problem?

Ich habe eine Datenbank gemacht und ich fand, dass meine andere Tabellen in ihr erstellt werden, aber nur eine ist mir diese Fehlermeldung zu geben.

War es hilfreich?

Lösung

Es gibt Bedingungen, die für einen Fremdschlüssel muss erfüllt sein:

  • Sie müssen InnoDB verwenden Speicher-Engine in beiden Tabellen.

  • Die Datentypen müssen identisch in beiden Tabellen. Z.B. VARCHAR (250) ist nicht identisch mit VARCHAR (255).

  • Es muss ein Primärschlüssel oder UNIQUE-Einschränkung auf der Spalte (n) in der übergeordneten Tabelle.

  • Ihre Fremdschlüssel müssen die gleiche Spalte (n), in der gleichen Reihenfolge, wie sie in dem Primärschlüssel oder UNIQUE-Einschränkung in der übergeordneten Tabelle deklarieren. Dies ist Ihr wahrscheinlichste Problem.

So zum Beispiel, wenn dies Ihre übergeordnete Tabelle:

CREATE TABLE PhoneModels (
  make VARCHAR(255),
  model VARCHAR(255),
  PRIMARY KEY (make, model)
);

In dem folgenden wäre falsch, da der Primärschlüssel zwei Spalten, aber jeder Fremdschlüssel hat eine Spalte.

CREATE TABLE Handsets
(
  ...
  make VARCHAR(255),
  model VARCHAR(255),
  FOREIGN KEY (make) REFERENCES PhoneModels(make),                  // WRONG
  FOREIGN KEY (model) REFERENCES PhoneModels(model)                 // WRONG
);

Es ist nicht so funktionieren; Sie sollen einen Fremdschlüssel, dass Verweise beiden Spalten haben.

CREATE TABLE Handsets
(
  ...
  make VARCHAR(255),
  model VARCHAR(255),
  FOREIGN KEY (make, model) REFERENCES PhoneModels(make, model),    // RIGHT
);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top