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.

¿Fue útil?

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
);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top