Error de MySQL número 121
-
19-09-2019 - |
Pregunta
Recibo este error en la creación de MySQL.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?El error dice: Can't create table './xxxxxxxx/blogReply.frm' (errno: 121)
Solución
Compruebe que todas sus limitaciones son realmente escritas correctamente, también comprobar que no hay ninguna otra tabla que utiliza los nombres de restricción FK_userId o FK_blogId
Otros consejos
El error 121 es un problema de restricción de clave externa.Lo primero que debe verificar es que las definiciones de su clave externa estén bien (todas las tablas y nombres de campos sean correctos, etc.).
También puedes intentar deshabilitar las comprobaciones de claves externas antes de crear la tabla, de esta manera:
SET FOREIGN_KEY_CHECKS = 0;
Esto tiene la desventaja de generar errores más adelante cuando vuelves a habilitar las comprobaciones de claves (configúralas en 1); sin embargo, si este es el caso, entonces significa que tienes algunos registros no válidos en alguna parte que están interfiriendo con la creación de la clave externa. .
Sin embargo, este problema también puede ocurrir si ha estado moviendo archivos de base de datos manualmente, como por ejemplo cambiando físicamente el nombre de la base de datos. data/your_database_name
directorio.InnoDB no puede correlacionar cambios físicos como ese con el espacio de tabla, por lo que altera las partes internas.
Si esto es lo que hizo, la solución que funciona mejor es mover su antigua base de datos a donde estaba, realizar un volcado o exportarla y hacer una DROP DATABASE
en él antes de volver a importarlo.
Por favor, compruebe que su clave externa que está creando es igual en todos los aspectos como tipo de datos con la columna del cuadro mencionado. Cada nombre de clave externa debe ser único para aquellas tablas en las que se cree, no se debe utilizar en toda otra tablas. para el problema anterior el nombre de clave externa "FK_userId" no debe ser utilizado en cualquier otra tabla.
Tengo este problema en MySQL 5.5, pero funciona bien en MySQL 5.6. El problema se debía a que el nombre de restricción parece ser único, pero si esto es un nombre largo y se trunca la pasen a no ser único, por ejemplo:
long_constraint_name_1
, long_constraint_name_2
puede llegar a ser long_constraint_name_