Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

#1005 - Can't create table (errno: 121)

Estas en el tema de #1005 - Can't create table (errno: 121) en el foro de Mysql en Foros del Web. Tengo que hacer una prática para la universidad. Desde la consola tengo que cargar un fichero para que cree toda la base de datos. El ...
  #1 (permalink)  
Antiguo 10/10/2014, 09:41
 
Fecha de Ingreso: febrero-2014
Mensajes: 13
Antigüedad: 10 años, 2 meses
Puntos: 0
#1005 - Can't create table (errno: 121)

Tengo que hacer una prática para la universidad. Desde la consola tengo que cargar un fichero para que cree toda la base de datos. El problema es que en una de las tablas me sale el error del titulo:
#1005 - Can't create table 'db546179411.mensajes' (errno: 121) (Detalles…)

Código MySQL:
Ver original
  1. SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
  2. SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
  3. SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
  4.  
  5. -- -----------------------------------------------------
  6. -- Schema db546179411
  7. -- -----------------------------------------------------
  8. CREATE SCHEMA IF NOT EXISTS `db546179411` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
  9. USE `db546179411` ;
  10.  
  11. -- -----------------------------------------------------
  12. -- Table `db546179411`.`usuarios`
  13. -- -----------------------------------------------------
  14. CREATE TABLE IF NOT EXISTS `db546179411`.`usuarios` (
  15.   `idusuarios` INT NOT NULL AUTO_INCREMENT,
  16.   `nombre` VARCHAR(45) NULL,
  17.   `apellido` VARCHAR(45) NULL,
  18.   `email` VARCHAR(45) NULL,
  19.   `usuario` VARCHAR(45) NULL,
  20.   `clave` INT NULL,
  21.   PRIMARY KEY (`idusuarios`))
  22.  
  23.  
  24. -- -----------------------------------------------------
  25. -- Table `db546179411`.`temas`
  26. -- -----------------------------------------------------
  27. CREATE TABLE IF NOT EXISTS `db546179411`.`temas` (
  28.   `idhilo` INT NOT NULL AUTO_INCREMENT,
  29.   `usuario` VARCHAR(45) NULL,
  30.   `tema` VARCHAR(45) NULL,
  31.   `fecha_hilo` DATETIME NULL,
  32.   `idusuario` INT NULL,
  33.   PRIMARY KEY (`idhilo`),
  34.   INDEX `idusuario_idx` (`idusuario` ASC),
  35.   CONSTRAINT `idusuario`
  36.     FOREIGN KEY (`idusuario`)
  37.     REFERENCES `db546179411`.`usuarios` (`idusuarios`)
  38.  
  39.  
  40. -- -----------------------------------------------------
  41. -- Table `db546179411`.`mensajes`
  42. -- -----------------------------------------------------
  43. CREATE TABLE IF NOT EXISTS `db546179411`.`mensajes` (
  44.   `idmensaje` INT NOT NULL AUTO_INCREMENT,
  45.   `mensaje` VARCHAR(45) NULL,
  46.   `fecha_mensaje` VARCHAR(45) NULL,
  47.   `idusuario` INT NULL,
  48.   `idhilo` INT NULL,
  49.   PRIMARY KEY (`idmensaje`),
  50.   INDEX `idusuario_idx` (`idusuario` ASC),
  51.   INDEX `idhilo_idx` (`idhilo` ASC),
  52.   CONSTRAINT `idusuario`
  53.     FOREIGN KEY (`idusuario`)
  54.     REFERENCES `db546179411`.`usuarios` (`idusuarios`)
  55.   CONSTRAINT `idhilo`
  56.     FOREIGN KEY (`idhilo`)
  57.     REFERENCES `db546179411`.`temas` (`idhilo`)
  58.  
  59.  
  60. SET SQL_MODE=@OLD_SQL_MODE;
  61. SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
  62. SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

¿Como puedo solucionarlo?

Última edición por gnzsoloyo; 10/10/2014 a las 10:33
  #2 (permalink)  
Antiguo 10/10/2014, 11:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: #1005 - Can't create table (errno: 121)

Los nombres de las CONSTRAINT no pueden ser los mismos de campos, tablas o bases.

Nunca.

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `db546179411`.`mensajes` (
  2.   `idmensaje` INT NOT NULL AUTO_INCREMENT,
  3.   `mensaje` VARCHAR(45) NULL,
  4.   `fecha_mensaje` VARCHAR(45) NULL,
  5.   `idusuario` INT NOT NULL,
  6.   `idhilo` INT NOT NULL,
  7.   PRIMARY KEY (`idmensaje`),
  8.   CONSTRAINT `fk_idusuario` -- No puede tener el nombre del campo
  9.     FOREIGN KEY (`idusuario`)
  10.     REFERENCES `db546179411`.`usuarios` (`idusuarios`)
  11.   CONSTRAINT `fk_idhilo` -- No puede tener el nombre del campo
  12.     FOREIGN KEY (`idhilo`)
  13.     REFERENCES `db546179411`.`temas` (`idhilo`)
Para que quede un poco más clara la explicación: AL crear una PK de una tabla , el indice que la gestiona tiene el nombre del campo sobre el que se crea. Luego, cuando creas una FK en otra tabla que apunte a esa PK, el nombre de la constraint será el nombre del indice que administra la relación. Pero como ya existe un índice con esa denominación, la creación falla.
Los nombres de indices, sean cuales fueren, son siempre únicos en una base. Es parte de las restricciones de todos los DBMS.
¿Se entiende?
Te pasará lo mismo con Oracle, SQL Server u otro que intentes usar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 10/10/2014 a las 11:33

Etiquetas: create, sql, tabla, table
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:32.