2012-05-29 3 views
1

이 오류는 MySQL에서 150 문제가 발생하지 않았으며이 문제에 관해 논의한 질문이 있었지만 여전히 잘못된 부분을 찾을 수 없습니다. mysql 오류 150 : 테이블을 만들 수 없습니다.

create table business (
    ident varchar(40) NOT NULL, 
    name varchar(50) NOT NULL, 
    rating INT UNSIGNED NOT NULL, 
    PRIMARY KEY(ident) 
) ENGINE=InnoDB; 

create table deals (
    business_id varchar(40) NOT NULL, 
    deals_id varchar(20) NOT NULL, 
    deals_title varchar(50) NOT NULL, 
    PRIMARY KEY (business_id, deals_id), 
    FOREIGN KEY (business_id) REFERENCES business(ident) ON DELETE CASCADE 
) ENGINE=InnoDB; 

create table d_options (
    business_id varchar(40) NOT NULL, 
    dealid varchar(20) NOT NULL, 
    option_title varchar(40) NOT NULL, 
    PRIMARY KEY(business_id, dealid, option_title), 
    FOREIGN KEY(business_id) REFERENCES business(ident) ON DELETE CASCADE, 
    FOREIGN KEY(dealid) REFERENCES deals(deals_id) 
) ENGINE=InnoDB; 

내가 얻을 오류 : 여기에 내가 만들려고하고있는 데이터베이스입니다 ERROR 1005 (HY000) : 나는 외국 알고

을 : 테이블 'test.d_options'(150 errno에를) 만들 수 없습니다 주요 제약 조건은 부모 테이블에있는 MySQL 문서 당 인덱스가 있어야하지만, 기본 키 인덱스에는 이 기본적으로 있다고 생각합니다.

이노 디비 상태의 결과는 다음과 같습니다

120530 0:47:48 Error in foreign key constraint of table test/d_options: 
FOREIGN KEY(dealid) REFERENCES deals(deals_id) 
) ENGINE=InnoDB: 
Cannot find an index in the referenced table where the 
referenced columns appear as the first columns, or column types 
in the table and the referenced table do not match for constraint. 
Note that the internal storage type of ENUM and SET changed in 
tables created with >= InnoDB-4.1.12, and such columns in old tables 
cannot be referenced by such columns in new tables. 
See http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html 
for correct foreign key definition. 

어떤 도움이 appriciated됩니다.

+0

오류 메시지가 꽤 분명한 것 같다 - 인덱스가 없습니다 FK 대상 열에 ... – DCoder

+0

하지만 대상 키가 테이블의 기본 키 중 하나이므로 색인이 있어야합니다. 해당 키에 추가 색인을 작성해야합니까, 예이면 데이터베이스에 대한 추가 부담이되지 않습니다. –

답변

5

당신은 (business_id, deal_id)에 복합 기본 키가 그들은 한 쌍으로 색인하지만, FK를 충족하기 위해, 당신은 혼자가 deal_id 다른 인덱스가 필요

create table deals (
    business_id varchar(40) NOT NULL, 
    deals_id varchar(20) NOT NULL, 
    deals_title varchar(50) NOT NULL, 
    PRIMARY KEY (business_id, deals_id), 
    FOREIGN KEY (business_id) REFERENCES business(ident) ON DELETE CASCADE, 
    /* Add an index on deals_id, separate from the compound PK */ 
    INDEX idx_deals_id (deals_id) 
) ENGINE=InnoDB; 
관련 문제