2009-07-24 955 views
35

Recibo este error en la creación de MySQL. Estoy haciendo:MySQL errorno 121

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; 

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

Respuesta

116

Comprobar que todas sus limitaciones son realmente escritas correctamente, compruebe también que no hay ninguna otra tabla que utiliza los nombres de restricción FK_userId o FK_blogId

+0

Permítanme probar esa teoría porque creo que estoy nombrando FK_userId antes pero en una tabla diferente –

+18

Agradable, no sabía que las claves externas necesitan tener nombres únicos a través de tablas. Gracias :) – Shade

+0

Hoy recibí este error por primera vez usando mySQL durante años, ahora. Realmente fue una coincidencia que los nombres siempre coincidan. –

7

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.).

Usted puede intentar deshabilitar comprobaciones de clave externa antes de crear la tabla, así, como este:

SET FOREIGN_KEY_CHECKS = 0; 

que tiene el inconveniente de lanzar errores más adelante cuando se vuelva a activar sus cheques clave (lo ponen a 1) Sin embargo, si este es el caso, significa que tiene 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 cambiar físicamente el nombre 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 funciona mejor es mover su base de datos anterior a su ubicación original, realizar un volcado o exportarla y hacer un DROP DATABASE antes de volver a importar.

+1

No im no físicamente thisgs moverse. Acabo de hacer un archivo de instalación y volver a ejecutarlo con una copia nueva para crear todas las tablas –

1

favor compruebe que su clave externa que está creando es igual 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.

1

En 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_