[mysql] MySQL : 테이블을 생성 할 수 없음 (errno : 150)

.sql 파일을 가져 오려고하는데 테이블 생성에 실패합니다.

실패한 쿼리는 다음과 같습니다.

CREATE TABLE `data` (
`id` int(10) unsigned NOT NULL,
`name` varchar(100) NOT NULL,
`value` varchar(15) NOT NULL,
UNIQUE KEY `id` (`id`,`name`),
CONSTRAINT `data_ibfk_1` FOREIGN KEY (`id`) REFERENCES `keywords` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;    

동일한 데이터베이스에서 .sql을 내 보냈고 모든 테이블을 삭제하고 가져 오려고하는데 왜 실패합니까?

MySQL : ‘./dbname/data.frm’테이블을 만들 수 없음 (errno : 150)



답변

로부터 MySQL을 – FOREIGN KEY 제약 조건 문서 :

삭제 된 테이블을 다시 작성하는 경우 테이블을 참조하는 외래 키 제약 조건을 따르는 정의가 있어야합니다. 올바른 열 이름과 유형이 있어야하며 앞에서 언급 한대로 참조 된 키에 대한 색인이 있어야합니다. 이것들이 만족되지 않으면, MySQL은 오류 1005를 반환하고 오류 메시지에서 오류 150을 참조하는데, 이는 외래 키 제약 조건이 올바르게 형성되지 않았 음을 의미합니다. 마찬가지로 오류 150으로 인해 ALTER TABLE이 실패하면 변경된 테이블에 대해 외래 키 정의가 잘못 형성되었음을 의미합니다.


답변

오류 150은 외래 키에 문제가 있음을 의미합니다. 외래 테이블의 키가 정확히 같은 유형이 아닐까요?


답변

실행 SHOW ENGINE INNODB STATUS;LATEST FOREIGN KEY ERROR출력 을 찾아 실제 오류 메시지를 얻을 수 있습니다 .

출처 : 비슷한 질문에 다른 사용자의 답변


답변

데이터 유형이 정확히 일치해야합니다. varchar 유형을 처리하는 경우 테이블은 동일한 데이터 정렬을 사용해야합니다.


답변

나는 올바른 대답은 모두 질문으로 오도한다고 생각합니다.

외래 키로 덤프 파일을 복원하는 경우 복원을 시작하기 전에 실제 대답은 다음과 같습니다.

SET FOREIGN_KEY_CHECKS=0;

당연히 외부 테이블이 존재하기 전에 복원이 일부 제한 조건을 작성하기 때문입니다.


답변

관련 테이블간에 엔진이 다른 경우이 오류 메시지가 표시 될 수 있습니다. 예를 들어, 테이블은 InnoDB를 사용하고 다른 테이블은 MyISAM을 사용합니다. 둘 다 같아야합니다


답변

오류 번호 150은 외래 키 제약 조건 실패를 의미합니다. 외래 키가 의존하는 테이블 (table keywords) 전에이 테이블을 생성하고있을 것입니다 . 해당 테이블을 먼저 작성하면 제대로 작동합니다.

그렇지 않은 경우 외래 키 문을 제거하고 테이블을 만든 후에 추가하십시오. 특정 제약 조건 실패에 대한보다 의미있는 오류 메시지가 나타납니다.