Ver Mensaje Individual
  #2 (permalink)  
Antiguo 10/03/2011, 05:24
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, 5 meses
Puntos: 2658
Respuesta: Problema al crear la tabla. Can't create table. (Errno:121)

El problema es relativamente simple:
Estás definiendo dos índices o CONSTRAINT con el mismo nombre y eso no puede existir.
Cuando pones CONSTRAINT nombreConstraint ..., debes tener en cuenta que nombreConstraint debe ser diferente a cualquier otro que exista, sea tabla, índice, FK o lo que sea, y en tu caso estás dandole al INDEX y a la FOREIGN KEY la misma denominación. Por eso chocan.
Mira:
Código MySQL:
Ver original
  1. CREATE  TABLE IF NOT EXISTS `practica1`.`domicilio` (
  2.   `calle` VARCHAR(50) NOT NULL ,
  3.   `cp` INT NOT NULL ,
  4.   `dni_dom` VARCHAR(9) NOT NULL ,
  5.   PRIMARY KEY (`calle`, `dni_dom`) ,
  6.   INDEX `cp` (`cp` ASC) , -- <- Mismo nombre del FK
  7.   INDEX `dni` (`dni_dom` ASC) , -- <- Mismo nombre del FK
  8.   CONSTRAINT `cp` -- <- Mismo nombre del INDEX
  9.     FOREIGN KEY (`cp` )
  10.     REFERENCES `practica1`.`codigopostal` (`cp` )
  11.   CONSTRAINT `dni` -- <- Mismo nombre del INDEX
  12.     FOREIGN KEY (`dni_dom` )
  13.     REFERENCES `practica1`.`Empleados` (`dni` )
La denominación de ambos debe ser diferente:
Código MySQL:
Ver original
  1. CREATE  TABLE IF NOT EXISTS `domicilio` (
  2.   `calle` VARCHAR(50) NOT NULL ,
  3.   `cp` INT NOT NULL ,
  4.   `dni_dom` VARCHAR(9) NOT NULL ,
  5.   PRIMARY KEY (`calle`, `dni_dom`),
  6.   INDEX `idx_cp` (`cp` ASC) ,
  7.   INDEX `idx_dni` (`dni_dom` ASC) ,
  8.   CONSTRAINT `FK_cp`
  9.     FOREIGN KEY (`cp` )
  10.     REFERENCES `codigopostal` (`cp` )
  11.   CONSTRAINT `FK_dni`
  12.     FOREIGN KEY (`dni_dom` )
  13.     REFERENCES `Empleados` (`dni` )
Por esa razón, ente otras cosas, es normal que se les ponga un prefijo que ayuda a saber d qué se trata (idx, fk, etc.) y de paso evita conflictos de nombres.
Estas diferencias también se deben cumplir entre tablas, porque cada FK y cada INDEX genera un archivo de índice en la base, por lo que no puede haber dos iguales que pertenezcan a tablas diferentes ni a la misma.

Postdata: Estás poniendo la imagen en un servicio no público. Te exige registarte para verlo.
No es una buena idea...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)