2012-06-20 4 views
0

이 테이블을 만들려고했지만 FK에서 아무 것도 시도하지 않았습니다.MySQL 오류 # 1005 (코드 150)

CREATE TABLE `tb_AutSituacao` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`Nome` varchar(50) CHARACTER SET latin1 NOT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 

CREATE TABLE `tb_AutHistorico` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`Situacao` int(11) NOT NULL, 
`Data` date NOT NULL, 
`Agente` int(11) NOT NULL, 
`Proposta` int(11) NOT NULL, 
PRIMARY KEY (`id`), 
KEY `AutHistorico_Situacao` (`Situacao`) 
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 

ALTER TABLE `tb_AutHistorico` ADD FOREIGN KEY (`Situacao`) REFERENCES `sicor`.`tb_AutSituacao` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT; 

항상 "# 1005 - 테이블 'tablename'(errno : 150)을 만들 수 없습니다."가 표시됩니다. 도와 주셔서 감사합니다.

+0

'sicor'는 유효한 스키마 이름입니까? 당신은 :'sicor' 접두사를 제거하고 "REFERENCES' tb_AutSituacao ('id')"로 바꾼다면 아마도'sicor'.'tb_AutSituacao' ('id') " – JMC

+0

예, 그렇습니다. 이것없이 시도하십시오. UPDATE : 스키마 이름이 있거나없는 동일한 오류. –

+0

세미콜론을 추가하고'sicor.'를 제거하면, [it works] (http://sqlfiddle.com/#!2/ce926/1). 관련성이 있는지는 모르겠지만 사용중인 MySQL 버전은 무엇입니까? – Wiseguy

답변

1
$ perror 150 
MySQL error code 150: Foreign key constraint is incorrectly formed 

FOREIGN KEY 정의를 수정하십시오. 자체가 (구문 오류) 잘못이 오류가 발생

, 정의 중 하나 또는 문제가 무엇인지와이 - 당신의 외부 키 제한 조건 정의에 문제가 있습니다

+0

죄송합니다. 그러나 잘못된 것을 찾을 수 없습니다. . –

1

(디버깅을위한 마지막 단락 http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html 참조) 참조되고있다. 구문이 정확하고 참조가 정확하므로 스키마 참조 일 가능성이 큽니다.

내 문장을 잘 실행할 수 있지만 스키마 이름으로 테이블 이름 앞에 접두어를 붙여야했습니다. 그렇지 않으면 MySQL은 현재 사용중인 데이터베이스에 대한 테이블을 생성하려고한다고 가정합니다. 수정 문은 다음을 참조하십시오 :

CREATE TABLE `sicor`.`tb_AutSituacao` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`Nome` varchar(50) CHARACTER SET latin1 NOT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; 

CREATE TABLE `sicor`.`tb_AutHistorico` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`Situacao` int(11) NOT NULL, 
`Data` date NOT NULL, 
`Agente` int(11) NOT NULL, 
`Proposta` int(11) NOT NULL, 
PRIMARY KEY (`id`), 
KEY `AutHistorico_Situacao` (`Situacao`), 
CONSTRAINT `FK_Situacao` FOREIGN KEY (`Situacao`) REFERENCES `sicor`.`tb_AutSituacao` (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; 

은 또한 테이블을 생성 한 후 제약 조건을 정의 할 필요가 없습니다 유의하시기 바랍니다, 위와 같이 대신 당신이 만드는 정의에 포함 할 수 있습니다.