3

わかりましたので、インデックスと外部キーを使用して MySQL にテーブルを作成しています。私は MySQL Workbench を使用してテーブルを作成し、それから SQL 作成スクリプトをフォワード エンジニアリングします (SQL コードをすぐに手動で書き出すよりも、視覚的な DB 環境の方が優れています)。

問題は、SQL スクリプトを mysql にインポートするときに何度も発生することです。古典的なエラーが発生します。

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

通常はインデックス/外部キーに関連する問題を毎回解決することができましたが、今では毎回修正する必要があることにイライラし始めています。何が問題なのかよくわかりません (特に、MySQL 製品が独自のデータベース用に SQL コードを作成している場合)。以下は、通常、問題の原因となるコードです。

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;

エラーは通常、最初の INDEX 定義から発生します。インデックス定義を取り出しても、最初の外部キー制約定義でエラーが発生します。確認したところ、外部キーのリモート列とローカル列は同じデータ型とサイズです。

4

1 に答える 1

4

「errno121は重複キーエラーを意味します」

制約にはデータベース内で一意の名前を付ける必要があります。FK名を変更したい場合があります。そのように、FK_groupMembers_groupそしてFK_groupMembers_user

于 2009-08-21T18:52:34.537 に答える