0

現在、MySQL Workbench のForward Engineerウィザードを使用してデータベースを作成しようとしていますが、次のエラーが発生します。

Executing SQL script in server
ERROR: Error 1005: Can't create table 'microweb.users' (errno: 121)


CREATE  TABLE IF NOT EXISTS `microweb`.`users` (
  `user_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `role_id` INT UNSIGNED NOT NULL ,
  `username` VARCHAR(45) NOT NULL ,
  `password` VARCHAR(45) NOT NULL ,
  `email` VARCHAR(45) NOT NULL ,
  `salt` VARCHAR(45) NOT NULL ,
  `first_name` VARCHAR(45) NOT NULL ,
  `middle_name` VARCHAR(45) NULL ,
  `last_name` VARCHAR(45) NOT NULL ,
  `address_id` INT UNSIGNED NULL ,
  `registration_id` INT UNSIGNED NOT NULL ,
  `active` TINYINT(1) NOT NULL ,
  `banned` TINYINT(1) NOT NULL ,
  PRIMARY KEY (`user_id`) ,
  UNIQUE INDEX `user_id_UNIQUE` (`user_id` ASC) ,
  UNIQUE INDEX `username_UNIQUE` (`username` ASC) ,
  UNIQUE INDEX `email_UNIQUE` (`email` ASC) ,
  UNIQUE INDEX `registration_id_UNIQUE` (`registration_id` ASC) ,
  CONSTRAINT `fk_user_role`
    FOREIGN KEY (`role_id` )
    REFERENCES `microweb`.`roles` (`role_id` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `fk_user_registration`
    FOREIGN KEY (`registration_id` )
    REFERENCES `microweb`.`registrations` (`registration_id` )
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB

SQL script execution finished: statements: 10 succeeded, 1 failed

完全なスクリプトには、多数の外部キーと 21 のテーブルが含まれています。問題は、実行後に phpMyAdmin に 2 つしかないことです。Workbench は 10 個が成功したと言います。

誰かが完全なモデルが必要な場合は、教えてください.

4

2 に答える 2

1

エラー 121 は、重複するキー名があることを示します。すべての FK 名がスキーマ全体で一意であることを確認する必要があります。

于 2013-03-15T08:48:26.217 に答える
1

最初に制約なしで試してから、 を使用して制約を追加することをお勧めしALTER TABLEます。

CREATE  TABLE IF NOT EXISTS `microweb`.`users` (
  `user_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `role_id` INT UNSIGNED NOT NULL ,
  `username` VARCHAR(45) NOT NULL ,
  `password` VARCHAR(45) NOT NULL ,
  `email` VARCHAR(45) NOT NULL ,
  `salt` VARCHAR(45) NOT NULL ,
  `first_name` VARCHAR(45) NOT NULL ,
  `middle_name` VARCHAR(45) NULL ,
  `last_name` VARCHAR(45) NOT NULL ,
  `address_id` INT UNSIGNED NULL ,
  `registration_id` INT UNSIGNED NOT NULL ,
  `active` TINYINT(1) NOT NULL ,
  `banned` TINYINT(1) NOT NULL ,
  PRIMARY KEY (`user_id`) ,
  UNIQUE INDEX `user_id_UNIQUE` (`user_id` ASC) ,
  UNIQUE INDEX `username_UNIQUE` (`username` ASC) ,
  UNIQUE INDEX `email_UNIQUE` (`email` ASC) ,
  UNIQUE INDEX `registration_id_UNIQUE` (`registration_id` ASC)
)
ENGINE = InnoDB;

ALTER TABLE `microweb`.`users`
ADD CONSTRAINT `fk_user_role`
    FOREIGN KEY (`role_id` )
    REFERENCES `microweb`.`roles` (`role_id` )
    ON DELETE CASCADE
    ON UPDATE CASCADE;

ALTER TABLE `microweb`.`users`
ADD CONSTRAINT `fk_user_registration`
    FOREIGN KEY (`registration_id` )
    REFERENCES `microweb`.`registrations` (`registration_id` )
    ON DELETE CASCADE
    ON UPDATE CASCADE;
于 2013-03-14T20:54:24.497 に答える