Pregunta

Ok, así que estoy creando tablas en MySQL con índices y claves externas. Yo uso de MySQL Workbench para crear las tablas y luego tener que realizar ingeniería hacia adelante un SQL script de creación (Me va mejor en un entorno visual DB que escribir el código SQL con la mano de inmediato).

El problema es que muchas veces al importar la secuencia de comandos SQL en MySQL, consigo el EROR clásica:

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

He conseguido averiguar el problema cada vez, por lo general clave de índice / extranjera relacionada, pero ahora estoy empezando a irritarse por tener que fijar cada vez. Realmente no entiendo cuál es el problema (especialmente cuando un producto de MySQL es la creación de código SQL para su propia base de datos). A continuación se muestra un código que generalmente causa el problema.

CREATE  TABLE IF NOT EXISTS `db`.`groupMembers` (
  `groupMembersID` INT NOT NULL AUTO_INCREMENT ,
  `groupID` INT NOT NULL ,
  `userID` INT NULL ,
  PRIMARY KEY (`groupMembersID`) ,
  INDEX `group` (`groupID` ASC) ,
  INDEX `user` (`userID` ASC) ,
  CONSTRAINT `group`
    FOREIGN KEY (`groupID` )
    REFERENCES `db`.`groups` (`groupsID` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `user`
    FOREIGN KEY (`userID` )
    REFERENCES `db`.`users` (`usersID` )
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;

El error proviene generalmente de la primera definición de índice - incluso cuando saco la definición de índice, sólo sale el error en la primera definición de la restricción de clave externa. He comprobado, y la columna de clave externa a distancia y la columna local son el mismo tipo de datos y el tamaño.

¿Fue útil?

Solución

"errno 121 significa un error de clave duplicada"

Las restricciones deben tener un nombre único en la base de datos, es posible que quieras cambiar sus nombres FK. Como tal, FK_groupMembers_group y FK_groupMembers_user.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top