Domanda

L'errore è: Impossibile creare c.handsets tabella

Come faccio a trovare il problema?

ho fatto un database e ho scoperto che le mie altre tabelle vengono create in esso, ma solo uno mi sta dando questo errore.

È stato utile?

Soluzione

Ci sono condizioni che devono essere soddisfatte per una chiave esterna:

  • È necessario utilizzare storage engine InnoDB in entrambe le tabelle.

  • I tipi di dati deve essere identico in entrambe le tabelle. Per esempio. VARCHAR (250) non è identico a VARCHAR (255).

  • Ci deve essere un vincolo PRIMARY KEY o UNIQUE sulla colonna (s) nella tabella padre.

  • La chiave straniero deve dichiarare la stessa colonna (s), nello stesso ordine, come quelli del vincolo PRIMARY KEY o UNIQUE nella tabella padre. Questo è il tuo problema più probabile.

Così, per esempio, se questa è la tabella padre:

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

Di seguito sarebbe sbagliato, perché la chiave primaria ha due colonne, ma ogni chiave esterna ha una colonna.

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

Non funziona in questo modo; si dovrebbe avere una chiave esterna che fa riferimento entrambe le colonne.

CREATE TABLE Handsets
(
  ...
  make VARCHAR(255),
  model VARCHAR(255),
  FOREIGN KEY (make, model) REFERENCES PhoneModels(make, model),    // RIGHT
);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top