2014-02-28 6 views
1

일반적으로 MySQL과 SQL의 응답을 얻을 수 있도록 작은 데이터베이스를 만들고 있습니다.MySQL 엔진 = InnoDB 오류 1005 errno 150

내가 잘못하고있는 것이 확실하지 않지만 문제가 문법적 인 경우에 대비하여 내 코드를 게시하겠다고 생각했습니다.

CREATE TABLE student(
     ID varchar(5) NOT NULL, 
     name varchar(20) NOT NULL, 
     dept_name varchar(20), 
     tot_cred numeric(3,0), 
    PRIMARY KEY(ID), 
    FOREIGN KEY(dept_name) 
    REFERENCES department 
    ON UPDATE CASCADE 
    ON DELETE CASCADE) 
ENGINE = InnoDB; 

dept_name 기본 키를 포함하는 '부서'테이블을 이미 만들었습니다. 외래 키 제약 조건을 사용할 때 ENGINE = InnoDB를 사용하지 않고 계속 시도하지만 분명히 성공하지 못했습니다.

누군가가 나를 왜 MySQL에서 오류 1005 errno 150을 던지고 있는지 설명하고 가능한 가장 단순한 용어를 사용하여 해결해야 할 수 있습니까? MySQL의 문서에서

+0

"부서"의 어떤 열을 참조합니까? 그것은 "ID"와 동일한 데이터 유형을 가지고 있습니까? – markg

+0

참조 키 참조에 대한 참조 변경 부서 (ID) –

답변

1

CREATE TABLE parent (
    id INT NOT NULL, 
    PRIMARY KEY (id) 
) ENGINE=INNODB; 

CREATE TABLE child (
    id INT, 
    parent_id INT, 
    INDEX par_ind (parent_id), 
    FOREIGN KEY (parent_id) 
     REFERENCES parent(id) 
     ON DELETE CASCADE 
) ENGINE=INNODB; 

는 데이터 유형이 FK ...에서 동일해야합니다 ...이 구문을 지켜야 있는지 확인하고 당신은 다른 테이블

에 참조 어떤 항목에 말을
+0

그래서 ENT를 포함하는 하위 테이블과 부모 테이블의 ENGINE = InnoDB를 항상 포함시키는 것이 좋습니다. – Christina

+0

MyIsam은 외래 키 제약 조건을 전혀 지원하지 않기 때문에 항상 MyIsam을 통해 InnoDB를 사용하는 것이 좋습니다. –

+0

전체 텍스트 인덱싱이 필요하면 myisam 만 사용합니다. 사용하는 버전은 전체 텍스트 인덱싱을 지원하지 않습니다. innodb (실제로는 아직 지원이되는지 확실하지 않음). INNODB는 트랜잭션 유형 데이터베이스를 지원하는 데 가장 적합합니다. – markg

1

:

1005 (ER_CANT_CREATE_TABLE) 

Cannot create table. If the error message refers to error 150, table creation failed because a foreign key constraint was not correctly formed. If the error message refers to error –1, table creation probably failed because the table includes a column name that matched the name of an internal InnoDB table. 

당신은 refferenced 테이블, 테이블 내에서 referrenced 행을 모두 지정해야합니다 REFERENCES를 사용하여 :

예 :

참조 부서 (ID)

또한 성능상의 이유로 숫자 값을 외래 키로 사용하는 것이 좋습니다.

0

방금이 문제가 발생했습니다. 내 솔루션은 내가 참조했던 필드에 대한 정수 유형이 모두 으로 지정되었음을 확인하는 것이었다.. 사람이 서명하고 다른 사람이 서명하지 않으면이 오류가 발생합니다.

음수를 원할 경우 두 가지가 모두 서명되었지만 대부분 확실하게 지정되지 않도록해야합니다. 요점은 같은 유형이어야한다는 것입니다.

다른 테이블의 기본 키를 참조하는 경우 기본 키가 UNSIGNED Integer 유형인지 확인하십시오.

그런 다음 외래 키를 만들 때 생성 할 열의 유형이 UNSIGNED 정수인지 확인하십시오.

+0

흠 이것은 흥미 롭습니다. 내가 여기에서 겪고있는 문제는 실제로 MySQL 구문에 따라 외래 키를 적절하게 작성함으로써 해결되었습니다 : 'FOREIGN KEY (attribute) REFERENCES table_name (attribute)' – Christina

관련 문제