2009-08-20 2 views
3

좋아, 그래서 색인 및 외래 키로 MySQL에 테이블을 만들고 있습니다. MySQL Workbench를 사용하여 테이블을 만든 다음 SQL 작성 스크립트를 전달 엔지니어에게 전달합니다 (필자는 SQL 코드를 직접 손으로 작성하는 것보다 시각적 인 DB 환경에서 더 효과적입니다). 나는 때마다, 일반적으로 인덱스/외래 키 관계를 문제를 알아 내기 위해 관리했습니다MySQL 인덱스 만들기 오류 테이블

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

: 나는 MySQL의에 SQL 스크립트를 가져올 때

문제는 여러 번, 나는 고전 eror를 얻을 수 하지만 지금은 매번 그것을 고쳐야하는 것에 짜증이 나기 시작합니다. 나는 정말로 문제가 무엇인지 이해하지 못한다. (특히 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

제약, 당신은 당신의 FK 이름을 변경 싶어 수있는 데이터베이스의 고유 한 이름이 있어야합니다 "errno를 121 중복 키 오류를 의미합니다." 마찬가지로, FK_groupMembers_groupFK_groupMembers_user.

+0

감사합니다. - 모든 외래 키와 색인 이름을 변경했으며 오류를 수정했습니다. 이것은 인덱스 이름에도 적용됩니까? 아니면 테이블 전용입니까? –

+0

예, 모든 엔티티 (색인, 테이블 등)는 데이터베이스 전체에서 고유해야합니다. – Fabian