Ver Mensaje Individual
  #2 (permalink)  
Antiguo 10/10/2014, 11:05
Avatar de gnzsoloyo
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, 4 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