Pregunta

utilizo MySQL Workbench para diseñar mi base de datos y para exportar la secuencia de comandos SQL CREATE. Pero cuando corro esta secuencia de comandos para crear la base de datos, me sale un error - Error: 121.

Resulta que MySQL Workbench da dos limitaciones del mismo nombre, debido a que ambas limitaciones utilizan la misma clave (Tengo una tabla con la clave primaria 'roleID' y hacen referencia a esta clave en otras dos mesas).

¿Hay alguna manera de cómo puedo cambiar el nombre de la restricción directamente en el diseñador, por lo que cuando el ingeniero adelante SQL CREATE guión, se le dará ningún error?

Traté Haga doble clic en la relación en el diseñador y darle un nuevo título, pero todavía genera el script con el nombre original.

Parte del script generado que crea el error:


CREATE  TABLE IF NOT EXISTS users.roles (
  roleID INT NOT NULL AUTO_INCREMENT ,
  ...
  PRIMARY KEY (roleID) ,
  ...);

CREATE TABLE IF NOT EXISTS users.userRoles ( ... roleID INT NOT NULL , ... CONSTRAINT roleID FOREIGN KEY (roleID ) REFERENCES users.roles (roleID ));

CREATE TABLE IF NOT EXISTS users.resourcePrivileges ( roleID INT NOT NULL , ... CONSTRAINT roleID FOREIGN KEY (roleID ) REFERENCES users.roles (roleID ));

¿Fue útil?

Solución

No está seguro de cómo terminaste con eso. Tomé MySQL Workbench para dar una vuelta, creado dos tablas con una FK y creó

-- -----------------------------------------------------
-- Table `mydb`.`users`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`users` (
  `idusers` INT NULL ,
  PRIMARY KEY (`idusers`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`usersRoles`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`usersRoles` (
  `users_idusers` INT NOT NULL ,
  PRIMARY KEY (`users_idusers`) ,
  CONSTRAINT `fk_usersRoles_users`
    FOREIGN KEY (`users_idusers` )
    REFERENCES `mydb`.`users` (`idusers` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

Tenga en cuenta que la restricción tiene un nombre único '' fk_usersRoles_users que no conseguiría duplicados ya que utiliza nombres de tabla. Sólo por diversión añadí otra relación entre las mismas tablas y por defecto consigo

-- -----------------------------------------------------
-- Table `mydb`.`usersRoles`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`usersRoles` (
  `users_idusers` INT NOT NULL ,
  `users_idusers1` INT NOT NULL ,
  PRIMARY KEY (`users_idusers`, `users_idusers1`) ,
  INDEX `fk_usersRoles_users1` (`users_idusers1` ASC) ,
  CONSTRAINT `fk_usersRoles_users`
    FOREIGN KEY (`users_idusers` )
    REFERENCES `mydb`.`users` (`idusers` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_usersRoles_users1`
    FOREIGN KEY (`users_idusers1` )
    REFERENCES `mydb`.`users` (`idusers` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

Que a su vez es una organización sin problema (todo lo anterior se genera auto - Yo sólo he puesto los nombres de tabla, clave principal en la tabla referenciada y ha añadido dos relaciones 1: N)

NOTAS:. Versión 5.2.30

Editar Tal vez algo que sucedió con sus preferencias. El nombre predeterminado para las restricciones fk se define en el modelo pestaña.

Otros consejos

Error 121 se debe a nombre de la duplicación restricción ejemplo solución En general, cuando la generación de la secuencia de comandos SQL opción de exportación MYSQL ingeniería directa con, para resolver el problema tenemos que acaba de asegurar que la "clave" nombres extranjeros son únicos en secuencia de comandos SQL / esquema.

Cuando se establece un limitaciones de claves externas, el nombre no asignará diferentes que se refiere misma clave primaria de alguna tabla. Por lo tanto, lo que estoy tratando de decir es que comprobar todos sus nombres de índice en todos los scripts generados si hay alguna duplicación. Cambiar el nombre a algún otro. A continuación, se puede proceder ...

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