[mysql] mysql 외래 키 제약 조건이 잘못 형성 오류

나는 두 개의 테이블을 가지고, table1열 함께 부모 테이블 IDtable2컬럼에 IDFromTable1나는에 FK를 넣어 (이 아닌 실제 이름) IDFromTable1ID에서 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”이 허용되지 않았습니다.