INNODB Cascade Sintaxis / Lógica Problema
-
05-09-2019 - |
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.
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.