error mysql foreign-keys mysql-error-1005

mysql - error - errno 121



Error 121 de MySQL (4)

Comprueba que todas tus restricciones estén realmente explicadas correctamente, también verifica que no haya otras tablas que usen los nombres de restricción FK_userId o FK_blogId

Estoy obteniendo este error en MySQL create. Estoy haciendo:

CREATE TABLE `blogReply` ( `Id` INT(24) NOT NULL AUTO_INCREMENT COMMENT ''Primary Key of This Table'', `blogId` INT(24) NOT NULL COMMENT ''Blog where this reply was posted'', `userId` INT(24) NULL COMMENT ''User the blog was posted by'', `name` VARCHAR(100) NULL DEFAULT ''Unknown'' COMMENT ''The Name of the user that the reply was posted by'', `email` VARCHAR(100) NULL DEFAULT ''Unknown'' COMMENT ''The Email of the user that the reply was posted by'', `http` VARCHAR(300) NULL DEFAULT ''Unknown'' COMMENT ''The Webaddress of the user that the reply was posted by'', `message` TEXT NOT NULL COMMENT ''text of the blog'', `votes` INT(10) DEFAULT 0 COMMENT ''Rating of the Blog'', `ratedBy` TEXT COMMENT ''People who have already Voted on this blog'', `dateReg` BIGINT NOT NULL COMMENT ''Date the User was Registered'', PRIMARY KEY (`Id`), CONSTRAINT `FK_userId` FOREIGN KEY(`userId`) REFERENCES `user` (`Id`) ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT `FK_blogId` FOREIGN KEY(`blogId`) REFERENCES `blog` (`Id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE = InnoDB;

¿Algunas ideas? Los estados de error: Can''t create table ''./xxxxxxxx/blogReply.frm'' (errno: 121)


El error 121 es un problema de restricción de clave externa. Lo primero que debe verificar es que las definiciones de las claves externas son correctas (todas las tablas y los nombres de los campos son correctos, etc.).

Puede intentar desactivar las comprobaciones de claves externas antes de crear la tabla, así:

SET FOREIGN_KEY_CHECKS = 0;

Eso tiene la desventaja de lanzar errores más tarde cuando vuelves a habilitar las comprobaciones de las teclas (establecerlo en 1), sin embargo, si este es el caso, significa que tienes algunos registros inválidos en algún lugar que están interfiriendo con la creación de la clave externa .

Sin embargo, este problema también puede ocurrir si ha movido manualmente los archivos de la base de datos, como el cambio de nombre físico del directorio data/your_database_name . InnoDB no puede correlacionar cambios físicos como ese con el espacio de tabla, por lo que se ensucia con las partes internas.

Si esto es lo que hizo, la solución que mejor funciona es mover su antigua base de datos a su ubicación original, realizar un volcado o exportación de la misma y realizar una DROP DATABASE antes de volver a importar.


En Tengo este problema en mysql 5.5 pero funciona bien en mysql 5.6. El problema se debe a que el nombre de la restricción parece ser único, pero si se trata de un nombre largo y se trunca, no se volverá único, por ejemplo:

long_constraint_name_1 , long_constraint_name_2 puede convertirse en long_constraint_name_


compruebe que la clave externa que está creando es la misma en todos los aspectos, como el tipo de datos con la columna de la tabla referida. Cada nombre de clave externa debe ser exclusivo para aquellas tablas en las que se crea, no debe usarse en ninguna otra tabla. para el problema anterior, el nombre de la clave externa "FK_userId" no se debe utilizar en ninguna otra tabla.