2013-07-26 4 views
1

다음 표를 생성했는데 외래 키 제약 조건 스크립트가 작동하지 않는 이유는 알 수 없습니다. 여기MySQL 오류에서 외래 키를 만들 수 없음 : 150

CREATE TABLE IF NOT EXISTS `project_map` (
`id` int(11) NOT NULL, 
`project_id` varchar(60) NOT NULL, 
`head` int(11) NOT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

그리고 내 추가 구속 라인 :

alter table project_map add constraint p_map_fk001 foreign key (`project_id`) references project(`project_id`) 

어떤 도움이 좋을 것이다 여기

CREATE TABLE IF NOT EXISTS `project` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`project_id` varchar(60) NOT NULL, 
`project_name` varchar(500) NOT NULL, 
`cons_bal` int(11) NOT NULL, 
`non_cons_bal` int(11) NOT NULL, 
`budget_head` varchar(100) NOT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

그리고 내 다른 테이블입니다. 고맙습니다.

+0

이 문서는 말 : 'InnoDB의 테이블을 포함하는 외래 키 오류가 발생할 경우 (일반적으로 MySQL 서버에서 150 오류), 당신이를 얻을 수 있습니다 SHOW ENGINE INNODB STATUS의 출력을 검사하여 가장 최근의 InnoDB 외부 키 오류에 대한 자세한 설명. ' –

+0

아마 요구 사항은 아니지만 소스 테이블에 외래 키 특성을 기본 키로 갖는 것이 좋습니다 – Uriil

+0

'SHOW ENGINE INNODB STATUS'의 결과 : 테이블 들여 쓰기/# sql-88c_d9의 외래 키 제약 조건 오류 : 외래 키 ('project_id')가 프로젝트 ('project_id')를 참조했습니다. 참조 된 열이 첫 번째 열로 나타나거나 해당 열의 열과 참조 된 테이블이 일치하지 않는 참조 된 테이블에서 인덱스를 찾을 수 없습니다 제약 조건. 주 ENUM과 SET의 내부 저장 형식이 오래된 테이블 에서> = InnoDB의-4.1.12과 같은 열이 생성 테이블에 변경하는 것이 새 테이블에서 같은 열을 참조 할 수 없습니다. @bmused – aki2all

답변

1

참조 된 테이블에는 참조 된 열이 같은 순서로 첫 번째 열로 나열되는 인덱스가 있어야합니다.

은 참조 : http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html

그래서 시도 :

CREATE TABLE `project` (                                                                                
      `id` int(11) NOT NULL AUTO_INCREMENT,                                                                            
      `project_id` varchar(60) NOT NULL,                                                                             
      `project_name` varchar(500) NOT NULL,                                                                            
      `cons_bal` int(11) NOT NULL,                                                                              
      `non_cons_bal` int(11) NOT NULL,                                                                             
      `budget_head` varchar(100) NOT NULL,                                                                            
      PRIMARY KEY (`id`),                                                                                 
      KEY `project_id` (`project_id`)                                                                              
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8 


CREATE TABLE `project_map` (                                              
       `id` int(11) NOT NULL,                                                
       `project_id` varchar(60) NOT NULL,                                             
       `head` int(11) NOT NULL,                                               
       PRIMARY KEY (`id`),                                                
       KEY `project_id` (`project_id`)                                             
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8 

ALTER TABLE `project_map` ADD CONSTRAINT 
`p_map_fk001` FOREIGN KEY (`project_id`) 
REFERENCES project(`project_id`);