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

Error 1280: Incorrect index name.

Estas en el tema de Error 1280: Incorrect index name. en el foro de Mysql en Foros del Web. Saludos: Llevo ya bastantes días intentando solventar este error, y he terminado por darme por vencido tras realizar múltiples cambios y comprobar que al compilar ...
  #1 (permalink)  
Antiguo 10/01/2012, 06:49
Avatar de oscarsb1988  
Fecha de Ingreso: abril-2010
Mensajes: 40
Antigüedad: 14 años, 7 meses
Puntos: 0
Error 1280: Incorrect index name.

Saludos:

Llevo ya bastantes días intentando solventar este error, y he terminado por darme por vencido tras realizar múltiples cambios y comprobar que al compilar todo sigue igual.

Código SQL:
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';
  4.  
  5. DROP SCHEMA IF EXISTS `BDTaller` ;
  6. CREATE SCHEMA IF NOT EXISTS `BDTaller` DEFAULT CHARACTER SET latin1 ;
  7. USE `BDTaller` ;
  8.  
  9. -- -----------------------------------------------------
  10. -- Table `BDTaller`.`Clientes`
  11. -- -----------------------------------------------------
  12. CREATE  TABLE IF NOT EXISTS `BDTaller`.`Clientes` (
  13.   `DNI` VARCHAR(9) NOT NULL ,
  14.   `Nombre` CHAR(45) NOT NULL ,
  15.   `Apellidos` CHAR(45) NOT NULL ,
  16.   `Dirección` VARCHAR(45) NOT NULL ,
  17.   `Teléfono` INT(9) NOT NULL ,
  18.   PRIMARY KEY (`DNI`) )
  19. ENGINE = InnoDB;
  20.  
  21. CREATE UNIQUE INDEX `DNI_UNIQUE` ON `BDTaller`.`Clientes` (`DNI` ASC) ;
  22.  
  23.  
  24. -- -----------------------------------------------------
  25. -- Table `BDTaller`.`Operarios`
  26. -- -----------------------------------------------------
  27. CREATE  TABLE IF NOT EXISTS `BDTaller`.`Operarios` (
  28.   `idOperarios` INT NOT NULL ,
  29.   `Nombre` CHAR(45) NOT NULL ,
  30.   `Apellidos` CHAR(45) NOT NULL ,
  31.   `Dirección` VARCHAR(45) NOT NULL ,
  32.   `Teléfono` INT(9) NOT NULL ,
  33.   PRIMARY KEY (`idOperarios`) )
  34. ENGINE = InnoDB;
  35.  
  36. CREATE UNIQUE INDEX `idOperarios_UNIQUE` ON `BDTaller`.`Operarios` (`idOperarios` ASC) ;
  37.  
  38. CREATE UNIQUE INDEX `Teléfono_UNIQUE` ON `BDTaller`.`Operarios` (`Teléfono` ASC) ;
  39.  
  40.  
  41. -- -----------------------------------------------------
  42. -- Table `BDTaller`.`Coches`
  43. -- -----------------------------------------------------
  44. CREATE  TABLE IF NOT EXISTS `BDTaller`.`Coches` (
  45.   `Matrícula` VARCHAR(20) NOT NULL ,
  46.   `Marca` VARCHAR(45) NOT NULL ,
  47.   `Modelo` VARCHAR(45) NOT NULL ,
  48.   `Fecha_Inicio` DATE NOT NULL ,
  49.   `Fecha_Fin` DATE NULL ,
  50.   `Motivo` VARCHAR(254) NOT NULL ,
  51.   `Finalizado` TINYINT(1) NOT NULL ,
  52.   `DNI` VARCHAR(9) NOT NULL ,
  53.   `idOperarios` INT NOT NULL ,
  54.   PRIMARY KEY (`Matrícula`) ,
  55.   CONSTRAINT `DNI`
  56.     FOREIGN KEY (`DNI` )
  57.     REFERENCES `BDTaller`.`Clientes` (`DNI` )
  58.     ON DELETE NO ACTION
  59.     ON UPDATE NO ACTION,
  60.   CONSTRAINT `idOperarios`
  61.     FOREIGN KEY (`idOperarios` )
  62.     REFERENCES `BDTaller`.`Operarios` (`idOperarios` )
  63.     ON DELETE NO ACTION
  64.     ON UPDATE NO ACTION)
  65. ENGINE = InnoDB;
  66.  
  67. CREATE UNIQUE INDEX `Matrícula_UNIQUE` ON `BDTaller`.`Coches` (`Matrícula` ASC) ;
  68.  
  69. CREATE INDEX `DNI` ON `BDTaller`.`Coches` (`DNI` ASC) ;
  70.  
  71. CREATE INDEX `idOperarios` ON `BDTaller`.`Coches` (`idOperarios` ASC) ;
  72.  
  73.  
  74. -- -----------------------------------------------------
  75. -- Table `BDTaller`.`Facturas`
  76. -- -----------------------------------------------------
  77. CREATE  TABLE IF NOT EXISTS `BDTaller`.`Facturas` (
  78.   `idFacturas` INT NOT NULL ,
  79.   `Precio` DOUBLE NOT NULL ,
  80.   `DNI` VARCHAR(9) NOT NULL ,
  81.   `IdOperarios` INT NOT NULL ,
  82.   `Matrícula` VARCHAR(20) NOT NULL ,
  83.   PRIMARY KEY (`idFacturas`) )
  84. ENGINE = InnoDB;
  85.  
  86. CREATE UNIQUE INDEX `idFacturas_UNIQUE` ON `BDTaller`.`Facturas` (`idFacturas` ASC) ;
  87.  
  88.  
  89. -- -----------------------------------------------------
  90. -- Table `BDTaller`.`Proveedores`
  91. -- -----------------------------------------------------
  92. CREATE  TABLE IF NOT EXISTS `BDTaller`.`Proveedores` (
  93.   `idProveedor` INT NOT NULL AUTO_INCREMENT ,
  94.   `Nombre` VARCHAR(45) NOT NULL ,
  95.   `Dirección` VARCHAR(45) NOT NULL ,
  96.   `Teléfono` INT(9) NOT NULL ,
  97.   PRIMARY KEY (`idProveedor`) )
  98. ENGINE = InnoDB;
  99.  
  100. CREATE UNIQUE INDEX `idProveedor_UNIQUE` ON `BDTaller`.`Proveedores` (`idProveedor` ASC) ;
  101.  
  102. CREATE UNIQUE INDEX `Teléfono_UNIQUE` ON `BDTaller`.`Proveedores` (`Teléfono` ASC) ;
  103.  
  104.  
  105. -- -----------------------------------------------------
  106. -- Table `BDTaller`.`Almacenes`
  107. -- -----------------------------------------------------
  108. CREATE  TABLE IF NOT EXISTS `BDTaller`.`Almacenes` (
  109.   `idAlmacenes` INT NOT NULL ,
  110.   `Nombre` CHAR(45) NULL ,
  111.   PRIMARY KEY (`idAlmacenes`) )
  112. ENGINE = InnoDB;
  113.  
  114.  
  115. -- -----------------------------------------------------
  116. -- Table `BDTaller`.`Productos`
  117. -- -----------------------------------------------------
  118. CREATE  TABLE IF NOT EXISTS `BDTaller`.`Productos` (
  119.   `idProductos` INT NOT NULL AUTO_INCREMENT ,
  120.   `Nombre` CHAR(45) NOT NULL ,
  121.   `Precio` DOUBLE NOT NULL ,
  122.   `Unidades` INT NOT NULL ,
  123.   `idProveedor` INT NOT NULL ,
  124.   `idAlmacenes` INT NOT NULL ,
  125.   PRIMARY KEY (`idProductos`) ,
  126.   CONSTRAINT `idProveedor`
  127.     FOREIGN KEY (`idProveedor` )
  128.     REFERENCES `BDTaller`.`Proveedores` (`idProveedor` )
  129.     ON DELETE NO ACTION
  130.     ON UPDATE NO ACTION,
  131.   CONSTRAINT `idAlmacenes`
  132.     FOREIGN KEY (`idAlmacenes` )
  133.     REFERENCES `BDTaller`.`Almacenes` (`idAlmacenes` )
  134.     ON DELETE NO ACTION
  135.     ON UPDATE NO ACTION)
  136. ENGINE = InnoDB;
  137.  
  138. CREATE UNIQUE INDEX `idProductos_UNIQUE` ON `BDTaller`.`Productos` (`idProductos` ASC) ;
  139.  
  140. CREATE INDEX `idProveedor` ON `BDTaller`.`Productos` (`idProveedor` ASC) ;
  141.  
  142. CREATE INDEX `idAlmacenes` ON `BDTaller`.`Productos` (`idAlmacenes` ASC) ;
  143.  
  144. SET SQL_MODE=@OLD_SQL_MODE;
  145. SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
  146. SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

El error en cuestión me los da en todas las líneas referentes a la llave foránea:
  • CREATE INDEX `DNI` ON `BDTaller`.`Coches` (`DNI` ASC) ;

Estoy trabajando con MySQL WorkBench.

Gracias
  #2 (permalink)  
Antiguo 10/01/2012, 07:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Error 1280: Incorrect index name.

Mira, el problema es sencillo: El nombre que le pones a ese indice es igual al menos a un indice que ya existe, y como los indices crean archivos protegidos en el disco, no puedes crear dos con el mismo nombre.
Presumiblemente es el indice primario de la tabla "Clientes", porque la PK (que genera un índice) usa ese mismo nombre, aunque no lo veas.
Por otro lado, estás cometiendo un error al crear indices como en este caso:
Código MySQL:
Ver original
  1. -- -----------------------------------------------------
  2. -- Table `BDTaller`.`Clientes`
  3. CREATE TABLE IF NOT EXISTS `BDTaller`.`Clientes` (
  4.   `DNI` VARCHAR(9) NOT NULL ,
  5.   `Nombre` CHAR(45) NOT NULL ,
  6.   `Apellidos` CHAR(45) NOT NULL ,
  7.   `Dirección` VARCHAR(45) NOT NULL ,
  8.   `Teléfono` INT(9) NOT NULL ,
  9.   PRIMARY KEY (`DNI`) )
  10. *
  11. CREATE UNIQUE INDEX `DNI_UNIQUE` ON `BDTaller`.`Clientes` (`DNI` ASC) ;
La PK de una tabla e por definición, única. No necesitas crear otro índice para ello. Estás creando indices redundantes, y eso lo pagarás con performance.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: index, sql
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 23:31.