2010-11-24 2 views
1

나는 VARCHAR 기반 외래 키를 사용 InnoDB에있는 테이블이 :InnoDB의 :의 길이를 변경하기 VARCHAR 기본 키

CREATE TABLE `portal_equity` (
    `isin` varchar(12) NOT NULL, 
    ...., 
    PRIMARY KEY (`isin`), 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

또 다른 테이블은 테이블에 외래 키 제약 조건이 있습니다

CONSTRAINT `equity_id_refs_isin_2581bb1d` FOREIGN KEY (`equity_id`) REFERENCES `portal_equity` (`isin`) 

을 기본 키 VARCHAR 열의 길이를 변경해야하므로 그렇게했습니다. ISIN 테이블 investtor 실패 (12)

외래 키 제약 조건의 원래 길이를 초과하는 경우 지금은 다음 무결성 오류에게 나는 "portal_equity"테이블에서 행을 참조 할 때마다 점점 계속. portal_equitypastvalue : DATA 튜플 : CONSTRAINT equity_id_refs_isin_7eed44e7 FOREIGN KEY (equity_id)는 인덱스에서 자식 테이블에 추가하려고 portal_equity (isin) portal_equitypastvalue_equity_id_6e7526e1 튜플 참고 문헌 3 개 필드; 0 : len 12; 16 진수 304c55303332333133343030; 오름차순 0LU032313400 ;; 1 : len 3; 16 진수 8fb578; asc x ;; 2 : len 4; 16 진수 8001398a; 오름차순 9 ;;

그러나 부모 테이블 investtor. portal_equity, 인덱스 PRIMARY에 가장 가까운 일치 항목은 다음과 같습니다. 물리적 기록 : n_fields 9; 소형 포맷; 정보 비트 0 0 : len 13; 16 진수 304c5530333233313334303036; 오름차순 0LU0323134006 ;; 1 : len 6; 16 진수 000000005139; 오름차순 Q9 ;; 2 : len 7; 16 진수 800000002d0110; 오름차순; 3 : len 4; 헥스 61736466; asc asdf ;; 4 : len 4; 16 진수 80000050; asc P ;; 5 : len 3; 헥스 736466; asc sdf ;; 6 : len 4; 16 진수 80000001; 오름차순; 7 : len 2; 16 진수 4144; 오름차순 AD; 8 : len 0; 16 진수; 오름차순;

모든 외래 키 제약 조건을 다시 생성해야합니까? 그것은 과도한 것처럼 보입니다. 이 동작/오류가 어딘가에 기록되어 있습니까?

답변

1

모든 외래 키 제약 조건을 다시 생성해야합니까?

예.

다소 과도한 것 같습니다.

기본 키 필드의 데이터 형식을 변경하면 외래 키 필드의 데이터 형식 (및 해당 인덱스와 제약 조건)을 변경해야한다는 것이 자연스러운 것처럼 보입니다.

documentation에는 '문자열 유형의 길이가 동일 할 필요는 없습니다'라고되어 있지만 논리적 의미는 적어도 외래 키 필드가 저장하려는 모든 데이터만큼 길어야한다는 것입니다.

행운을 빈다.

+0

실제로 FOREIGN KEY 제약 조건 자체는 업데이트 할 필요가 없습니다. 대신, 기본 키를 저장하는 자식 테이블의 실제 필드는 이전 길이를 가지며, 내가 완전히 놓친 것입니다. 이는 어리석은 일입니다. 나는 부분적으로 ORM을 비난한다. ORM은 자동적으로 이러한 외래 키 필드를 만들고 내 레이더에서 그들을 보호한다. – miracle2k