errore nella tabella di realizzazione -mysql
-
29-09-2019 - |
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.
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
);