문제

외국 키 기부금을 추가하려고 할 때이 오류가 발생합니다.

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

해당 프로젝트가 삭제 될 때 프로젝트 ID를 공유하는 모든 이미지에 대해 ON DELETE 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;

대단히 감사합니다!

도움이 되었습니까?

해결책

변경 project_id 크기가 같은 열입니다 smallint(6) (또는 5). 또한 서명 또는 서명되지 않은 상태로 만들어야합니다.

... MySQL 웹 사이트에서 다음과 같이 말합니다.

외국 키와 참조 키의 해당 열에는 유형 변환없이 비교할 수 있도록 InnoDB 내부에서 유사한 내부 데이터 유형이 있어야합니다. 정수 유형의 크기와 부호는 동일해야합니다. 문자열 유형의 길이는 동일 할 필요가 없습니다. 비 바이너리 (문자) 문자열 열의 경우 문자 세트와 콜라이트는 동일해야합니다.

다른 팁

데이터 타입이 일치하는 데 필요한 것이라고 생각했습니다. project_id는 한 테이블에서 smallint (6)이고 다른 테이블에서는 smallint (5)입니다.

project_id는 둘 다되어서는 안됩니다 smallint(6)?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top