error en la mesa de toma de -mysql
-
29-09-2019 - |
Pregunta
El error es: No se puede crear c.handsets mesa
¿Cómo puedo encontrar el problema?
Me han hecho una base de datos y me encontré con que mis otras tablas se crean en ella, pero sólo uno me está dando este error.
Solución
Hay condiciones que deben cumplirse para que una clave externa:
-
Debe utilizar el motor de almacenamiento InnoDB en ambas tablas.
-
Los tipos de datos debe ser idénticos en ambas tablas. P.ej. VARCHAR (250) no es idéntica a VARCHAR (255).
-
No debe ser una restricción PRIMARY KEY o UNIQUE en la columna (s) de la tabla primaria.
-
Su clave externa debe declarar la misma columna (s), en el mismo orden, como los de la restricción PRIMARY KEY o UNIQUE en la tabla padre. Este es el problema más probable.
Así, por ejemplo, si este es su tabla padre:
CREATE TABLE PhoneModels (
make VARCHAR(255),
model VARCHAR(255),
PRIMARY KEY (make, model)
);
El siguiente sería un error porque la clave primaria tiene dos columnas, pero cada clave externa tiene una columna.
CREATE TABLE Handsets
(
...
make VARCHAR(255),
model VARCHAR(255),
FOREIGN KEY (make) REFERENCES PhoneModels(make), // WRONG
FOREIGN KEY (model) REFERENCES PhoneModels(model) // WRONG
);
No funciona de esta manera; usted debe tener una clave externa que hace referencia a las dos columnas.
CREATE TABLE Handsets
(
...
make VARCHAR(255),
model VARCHAR(255),
FOREIGN KEY (make, model) REFERENCES PhoneModels(make, model), // RIGHT
);