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.

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)

Etiquetas:

Suscríbete a nuestro Feed para recibir las últimas novedades de diseño web, diseño gráfico y programación

20 Comentarios hasta el momento »

  1. Tweets that mention Cómo solucionar MySQL Error #1005 – Can’t create table (errno: 121) - The n4gash Blog -- Topsy.com dijo

    4 de enero del 2011 a las 11:46

    […] This post was mentioned on Twitter by Marcos, Tendencias OK. Tendencias OK said: Cómo solucionar MySQL Error #1005 – Can't create table (errno: 121 …: Suscríbete a nuestro Feed para recibir l… http://bit.ly/gjZuUc […]

  2. Br3nd4 dijo

    20 de julio del 2011 a las 9:07

    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

  3. Michael Bates dijo

    29 de enero del 2012 a las 23:24

    GRACIASSSS!!!!!!!!!

  4. Guaruzo dijo

    4 de mayo del 2012 a las 22:05

    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.

  5. XSuasenegerX dijo

    14 de mayo del 2012 a las 18:23

    Me Salvaste….
    Buena info

  6. hawy dijo

    1 de agosto del 2012 a las 19:22

    Claro y conciso.GRACIAS!

  7. Nagash dijo

    1 de agosto del 2012 a las 20:24

    Me alegro de que te fuera útil.

  8. Jorge Pérez dijo

    13 de agosto del 2012 a las 21:26

    Perfecto !!!!!!!!!!!!!!!!! Simple y claro 🙂

  9. martin dijo

    17 de septiembre del 2012 a las 3:53

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

  10. Sony dijo

    3 de octubre del 2012 a las 18:56

    muy buen aporte gracias….

  11. jorge dijo

    3 de octubre del 2012 a las 20:55

    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

  12. Nagash dijo

    5 de octubre del 2012 a las 16:02

    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

  13. jorge dijo

    8 de octubre del 2012 a las 15:28

    hola Nagash gracias por responder
    lo solucione cambiando a
    ……..
    ENGINE=InnoDB a ENGINE=MyISAM y está todo bien

    saludos

  14. Nagash dijo

    11 de octubre del 2012 a las 16:33

    Genial 😉

  15. isai dijo

    7 de noviembre del 2012 a las 20:17

    Chido gracias por el aporte

  16. SirDuque dijo

    27 de noviembre del 2012 a las 13:49

    Gracias por la orientacion!!!

  17. Nagash dijo

    20 de agosto del 2013 a las 8:58

    Me alegro de que os haya sido útil a todos 😉

    Un saludo

  18. Monica dijo

    27 de enero del 2015 a las 19:10

    Muchas gracias!! Me sirvio de mucho 🙂

  19. Isaac dijo

    29 de julio del 2015 a las 15:38

    Despues de pelear varias horas encontre este dato muchas gracias ahora puedo terminar de relacionar mi base de datos

  20. N4gash dijo

    25 de mayo del 2016 a las 16:30

    Me alegro mucho de que os haya sido de utilidad @Monica e @Isaac

Comentarios RSS · TrackBack URI

Dejanos tu Comentario

Nombre: (Requerido)

E-Mail: (Requerido)

Sitio WEB:

Comentario:

What is 13 + 9 ?
Please leave these two fields as-is: