Pregunta

Tengo un problema con una base de datos SQL que estoy creando. Estoy intentando cambiar la vuelta a usar INNODB pero me parece que no puede obtener la sintaxis (o, posiblemente, la lógica) correcta para conectar en cascada.

Esto es una parte del código erroring . No le gusta la línea 40.

Salida de error en la forma habitual críptica (al menos para mí):

ERROR 1005 (HY000) at line 36: Can't create table './school/staff.frm' (errno: 150)

Editar:

Esta es la archivo SQL toda Estoy tratando de tubería en si eso ayuda.

¿Fue útil?

Solución

Las claves externas tienen que ser los índices. ( role.name )

Prueba esto:

CREATE TABLE IF NOT EXISTS `role` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` char(30) NOT NULL,
  `description` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `name` (`name`)
) ENGINE=InnoDB;

Otros consejos

¿Se refiere a la restricción de clave externa "papel" de la columna a utilizar el nombre en lugar de la identificación? Parece que la siguiente línea (línea 43):

FOREIGN KEY (role) REFERENCES role(name)

debería ser:

FOREIGN KEY (role) REFERENCES role(id)

Esto ejecuta sin errores.

Alternativamente, el tipo "staff.role" de columna de datos (línea 40, el papel INT NOT NULL) podría ser cambiado a CHAR (30) NOT NULL.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top