2009-08-20 91 views
3

好吧,所以我在MySQL中創建索引和外鍵的表。我使用MySQL Workbench來創建表格,然後讓它正向工程設計一個SQL創建腳本(在可視化DB環境中,我的工作比剛剛用手寫出SQL代碼更好)。MySQL創建表索引錯誤

的問題是很多時候我導入SQL腳本到MySQL,我得到了經典eror:

#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; 

錯誤通常來自於第一索引定義 - 甚至當我拿出索引定義,我只是在第一個外鍵約束定義得到的錯誤。我檢查過了,外鍵遠程列和本地列是相同的數據類型和大小。

回答

4

「錯誤號121指的是重複鍵錯誤」

約束必須在數據庫中唯一的名字,你可能想改變你的FK名稱。像這樣,FK_groupMembers_groupFK_groupMembers_user

+0

謝謝 - 我改變了我的所有外鍵,索引名稱,並修復了錯誤。這是否也適用於索引名稱,還是僅限於表格特定? – 2009-08-24 15:17:42

+0

是的,每個實體(索引,表等)在整個數據庫中都應該是唯一的)。 – Fabian 2009-08-24 16:16:17