2010-01-04 6 views
0

내가 외래 키 contraint 추가하려고이 오류 받고 있어요 :오류 만들 때 외래 키

#1005 - Can't create table './testtable/#sql-595_146.frm' (errno: 150) 

내가 ON 프로젝트 ID를 공유하는 모든 이미지 CASCADE 삭제 할 필요를 때 프로젝트 삭제됩니다. 지금

CREATE TABLE IF NOT EXISTS `images` (
`image_id` mediumint(8) unsigned NOT NULL auto_increment, 
`project_id` smallint(6) NOT NULL, 
PRIMARY KEY (`image_id`), 
KEY `project_id_ix` (`project_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=28 ; 

CREATE TABLE IF NOT EXISTS `projects` (
`project_id` smallint(5) unsigned NOT NULL auto_increment, 
PRIMARY KEY (`project_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ; 

을 내가 제약 조건을 추가하려면 아래 쿼리를 실행하면 쿼리가 위의 게시 된 오류와 함께 실패 : 다음과 같이 내 단순화 된 테이블 구조입니다. 아무도 도와 줄 수 있습니까?

ALTER TABLE `images` ADD CONSTRAINT `project_id_fk` FOREIGN KEY (`project_id`) REFERENCES `projects` (`project_id`) ON DELETE CASCADE; 

감사합니다.

+0

MySQL이 CREATE TABLE 문에서 오류 번호 1005를보고 오류 메시지가 오류 150을 참조하면 외래 키 제약 조건이 올바르게 구성되지 않아 테이블을 만들지 못했습니다. http://dev.mysql.com/doc/ refman/5.1/ko/innodb-foreign-key-constraints.html –

+0

^yea man, 나는 오류가 무엇을 말하는지 압니다. 내가 알 수없는 것은 나의 실수가 어디에 있는지입니다. 그래서 내가 도움을 청하는거야. – user239237

답변

1

project_id 열을 동일한 크기 smallint(6) (또는 5)으로 변경하십시오. 서명 또는 서명되지 않은 서명을해야합니다.

...

은 말한다 MySQL의 웹 사이트에서 : 외래 키와 InnoDB의 내부 유사한 내부 데이터 형식이 있어야합니다 참조 키

대응 열 그들은 타입 변환없이 비교 될 수 있도록. 정수 유형의 크기와 부호는 동일해야합니다. 문자열 유형의 길이는 동일 할 필요는 없습니다. 이항 (문자) 문자열 열의 경우 문자 집합과 데이터 정렬이 동일해야합니다.

+0

그것은 또한 하나의 테이블에 서명되어 있고 다른 테이블에는 서명되어 있지 않다. – Powerlord

+0

내가 UR 코멘트를 받기 전에 그것을 붙 잡았다. 고마워. – munch

+0

그걸 고쳤어! 나는 결코 그것을 붙잡지 않고 있었을 것이다! 도와 주셔서 감사합니다! – user239237

1

데이터 유형이 일치해야한다고 생각했습니다. project_id는 한 테이블에서는 smallint (6)이고 다른 테이블에서는 smallint (5)입니다.

+0

뭉크가 저를 때려 눕 힙니다. 이틀 전에이 오류가 있었고 동일한 게시판을 찾았습니다 = D – decompiled

+0

그게 바로 그 거예요! 도와 주셔서 감사합니다! – user239237

1

project_id가 모두 smallint(6)일까요?

+0

바. "새 메시지"팝업을받지 못했습니다. 옛 뉴스. – Satanicpuppy