나는 두 개의 테이블을 가지고, table1
열 함께 부모 테이블 ID
과 table2
컬럼에 IDFromTable1
나는에 FK를 넣어 (이 아닌 실제 이름) IDFromTable1
에 ID
에서 table1
나는 오류를 얻을 Foreign key constraint is incorrectly formed error
. table1
레코드가 삭제 되면 표 2 레코드를 삭제하고 싶습니다 . 도움을 주셔서 감사합니다
ALTER TABLE `table2`
ADD CONSTRAINT `FK1`
FOREIGN KEY (`IDFromTable1`) REFERENCES `table1` (`ID`)
ON UPDATE CASCADE
ON DELETE CASCADE;
다른 정보가 필요하면 알려주십시오. 나는 mysql을 처음 사용한다
답변
HeidiSQL에서도 이와 동일한 문제가 발생했습니다. 당신이받는 오류는 매우 비밀입니다. 내 문제는 외래 키 열과 참조 열의 유형이나 길이가 같지 않다는 것입니다.
외래 키 열은 SMALLINT(5) UNSIGNED
이고 참조 열은 INT(10) UNSIGNED
입니다. 두 가지를 모두 동일한 유형으로 만들면 외래 키 생성이 완벽하게 작동했습니다.
답변
MyISAM
엔진을 사용하여 부모 테이블을 만들 때 동일한 문제가 발생했습니다 . 바보 같은 실수입니다.
ALTER TABLE parent_table ENGINE=InnoDB;
답변
열이 동일한 유형 primary_key
인지 확인하고 참조 열이 아닌 경우 확인하십시오 INDEXED
.
답변
외래 키를 정의하는 구문은 매우 관대하지만, 다른 사람이 외면 키를 “동일한 유형”으로 만들어야한다는 사실은 데이터 형식과 길이 및 비트 서명뿐만 아니라 데이터 정렬에도 적용됩니다.
모델에서 데이터 정렬을 혼합하지는 않겠지 만 (그렇게 하시겠습니까?) 그렇지 않으면 기본 및 외래 키 필드가 phpmyadmin 또는 Heidi SQL 또는 사용하는 모든 데이터 정렬 유형과 동일한 지 확인하십시오.
이것이 4 시간의 시행 착오를 덜어주기를 바랍니다.
답변
나는 같은 문제가 있었지만 해결했다.
‘table1’의 열 ‘ID’에 UNIQUE 색인 이 있는지 확인하십시오 !
물론이 두 테이블의 유형 ‘ID’와 ‘IDFromTable1’의 길이는 같아야합니다. 그러나 당신은 이미 이것에 대해 알고 있습니다.
답변
그냥 완료하십시오.
VARCHAR (..)의 외래 키가 있고 참조 된 테이블의 문자 집합이이를 참조하는 테이블과 다른 경우이 오류가 발생할 수 있습니다.
예를 들어 Latin1 테이블의 VARCHAR (50)은 UTF8 테이블의 VARCHAR (50)과 다릅니다.
답변
mysql 오류 텍스트는 그다지 도움이되지 않습니다. 제 경우에는 열에 “not null”제약 조건이 있으므로 “on delete set null”이 허용되지 않았습니다.