1

mEmpl 및 mOrder라는 테이블이 2 개 있습니다.mysql - 외래 키를 datetime 필드 유형으로 지정할 수 없습니다.

mEmpl 9 개 필드가 있습니다

IDEmployee (INT), 짧은 이름 (VARCHAR), 이름 (VARCHAR), DBegin (날짜 기본 키), DEND (날짜 기본 키), 디렉토리 (VARCHAR)를, 모드 (VARCHAR 기본 키), 시간제 (VARCHAR) IDJob (INT)가

mOrder 11 개 필드 가지고

IDOrder (INT)을 NrOrder (INT) OrderDesc (VARCHAR) IDOwner (INT), 예산 (부동), DBegin (날짜 시간), DEND (날짜), 모드 (VARCHAR), ArtCost (INT), BaseRate (INT), BASEITEM (INT)는

내가 mEmpl를 참조 mOrder(DBegin, DEnd, and Mode)에서 외부 키를 추가하려고 항상 오류 메시지가 발생합니다 :

ERROR 1005 (HY000): Can't create table 'spezet.#sql-4d4_1' (errno: 150) 

하지만, 난 그냥 같은 DBegin에 외래 키를 추가하는 경우 :이 오류를 제기 아니에요

ALTER TABLE mOrder ADD FOREIGN KEY (DBegin) REFERENCES mEmpl(DBegin); 

! DBegin이 성공적으로 mEmpl.DBegin 기본 키를 가리키고 있습니다.

아무에게도 나에게 설명 할 수 있습니까? 또는 MySQL이 실제로 2 datetime 필드를 동시에 가리킬 수 없는지 여부를 알려주십시오. 귀하의 회신에 미리 감사드립니다.

+0

사용중인 스토리지 엔진은 무엇입니까? –

+1

각 테이블에 대해 'SHOW CREATE TABLE table_name'을 실행하고 여기에 게시하십시오. – fancyPants

+0

브라이언 : InnoDB Engine을 사용하고 있습니다 .. tombom : 고마워, 그 쿼리를 시도해 .. – Andromeda

답변

2

당신은 루트로 MySQL에 로그인 입력하여 문제의 원인의 자세한 내용을 찾을 수 있습니다 -

SHOW ENGINE INNODB STATUS; 

이 도움이 될 수 있습니다. 외부 키를 만들 때 외래 키 제약 조건에 지정된 순서대로 인덱스의 첫 번째 열로 참조 된 열을 포함하는 참조 된 테이블에 인덱스가 필요하다는 것이 문제의 원인이라고 생각됩니다.

자세한 내용은 here을 참조하십시오.

+0

요즘 MySQL은 일반적으로 FK 관련 필드에 필요한 인덱스를 자동으로 생성합니다. –

+0

@MarcB, 예, MySQL Workbench가 확실히 그 역할을합니다. –

+0

여러분 모두 같은 전문 프로그래머의 모든 위대한 답변 주셔서 감사합니다 ... 난 내 참조 된 필드에 어떤 인덱스를 추가 하여이 문제를 해결했습니다. 최고 감사합니다! – Andromeda

관련 문제