Cómo solucionar el error de MySQL #1005 – Can’t create table (errno: 121)

Ayer me apareció este error al tratar de ejecutar un DDL en una base de datos MySQL. El script estaba compuesto por varias sentencias de creación de tablas con primary keys, foreign keys e índices.

Este error aparece cuando estamos duplicando información de algún objeto de la base de datos en una sentencia CREATE TABLE . Una de las razones por la que se produce puede ser que la tabla ya exista en el diccionario de datos interno de la BBDD por algún proceso anterior y no se haya limpiado correctamente. Otro motivo, que es el que a mí me estaba provocando el error, es un conflicto de nombres entre foreign keys, ya que los nombres de éstas también deben de ser únicos en la BBDD, al igual que los nombres de las tablas, índices, vistas, etc.

Solución

La solución para mi caso, por tanto, es personalizar el nombre de cada Foreign Key. El ejemplo expuesto a continuación lo he tomado de mi script. Tenemos una tabla de hechos donde almacenamos la información de tiendas (t_tiendas) y dos tablas auxiliares donde vamos a guardar opiniones de cada tienda e imágenes de éstas (t_tiendas_img y t_tiendas_opn).  Estas dos tablas tienen como foreign key el id_tienda de la fact table y el error que cometí fue denominar a ambas con el mismo nombre. Para corregirlo, simplemente asignamos un nombre distinto a cada foreign key (id_tienda_img e id_tienda_opn).

CREATE  TABLE IF NOT EXISTS `t_tiendas_opn` (
`id_tienda` INT NOT NULL ,
`txt_opinion` MEDIUMTEXT NOT NULL ,
`valoracion` INT NOT NULL ,
PRIMARY KEY (`id_tienda`) ,
CONSTRAINT `id_tienda_opn`
FOREIGN KEY (`id_tienda` )
REFERENCES `t_tiendas` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)

CREATE  TABLE IF NOT EXISTS `t_tiendas_img` (
`id_tienda` INT NOT NULL ,
`path_img` VARCHAR(120) NOT NULL ,
PRIMARY KEY (`id_tienda`) ,
CONSTRAINT `id_tienda_img`
FOREIGN KEY (`id_tienda` )
REFERENCES `t_tiendas` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)

20 comentarios

  1. ohhh!!!! muchas gracias esta info me sirvio bastante, tengo q entregar un proyecto y me salia este error y no sabia como solucionarlo, de verdad mil gracias

  2. Después de horas de batallar con este problema, tú me lo has resuelto de la forma más fácil posible. Te lo agradezco mucho.

  3. Hola muy buen aporte, muchas gracias pude solucionar este problema de fk con nombres repetidos.. me traia hace un rato atascado
    Gracias
    Muchos Saludos

  4. a mi me sale el error en esta parte de mi script:



    CREATE TABLE IF NOT EXISTS `noticia_importante` (
    `imp_id` int(11) NOT NULL AUTO_INCREMENT,
    `imp_titulo` varchar(255) NOT NULL,
    `imp_descripcion` varchar(255) NOT NULL,
    `imp_fecha_creacion` datetime NOT NULL,
    `imp_estado` int(2) NOT NULL,
    PRIMARY KEY (`imp_id`) — <– aqui
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

    pueden ayudarme

  5. Jorge,

    Yo la puedo crear sin ningún problema, ¿podrías publicar el resto del script? probablemente haya otra tabla que esté entrando en conflicto con ésta.

    un saludo

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

What is 15 + 14 ?
Please leave these two fields as-is: