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)

¿Fue útil?

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_

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