2011-10-01 3 views
0

두 테이블 tbluserlogindetailtblRoles이 있습니다.테이블에 외래 키를 적용하는 동안 오류 코드 1005가

CREATE TABLE `tbluserlogindetail` (
`LoginID` varchar(45) NOT NULL, 
`Name` varchar(45) DEFAULT NULL, 
`Password` varchar(45) DEFAULT NULL, 
PRIMARY KEY (`LoginID`), 
UNIQUE KEY `LoginID_UNIQUE` (`LoginID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1$$ 

EDIT doratesting 다음과 같이

tbluserlogindetail이다. tbluserlogindetail; 나는이 (가) tblroles 테이블의 컬럼 LoginID에 대한 기본 키를 지정하려면 다음하지만 난 잘못 어디로 갔는지 모르겠어요 할 수있는 한 도움을 시도

CREATE TABLE `tblroles` (
    `RoleID` int(11) NOT NULL, 
    `LoginID` varchar(45) NOT NULL, 
    PRIMARY KEY (`RoleID`,`LoginID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1$$ 

다음과 같이

내 두 번째 테이블 tblRoles입니다 나를.

나는 문서를 겪었지만 오류를 해결할 수없는 한

그렇게 나를

ALTER TABLE tblroles ADD FOREIGN KEY (loginid) REFERENCES tbluserlogindetail(loginid)

답변

1

참조 된 열이 참조 된 테이블에서 고유해야합니다 도와주세요. 다음 옵션 중 하나를 시도해보십시오 tbluserlogindetail

  • 기본 키가 (ID, loginid) 그래서 당신은 당신의 외래 키 대신 (loginid)으로 그것을 사용할 수 있습니다. 이 경우 tbluserlogindetail_IDtblroles 열을 추가해야합니다.
  • tbluserlogindetail 테이블의 LoginID 열에 고유 한 색인을 추가해보십시오. 이것은 실제로 유일 할 경우에만 가능합니다.

tbluserlogindetail의 기본 키가 PRIMARY KEY (ID, LoginID)으로 정의 된 이유는 무엇입니까? ID 필드는 자동 증가 필드이며 이미 고유합니다. 그렇다면 기본 키의 일부로 LoginID를 포함하는 이유는 무엇입니까? 테이블 디자인으로 돌아가서 기본 키로 선택할 열을 다시 생각해야한다고 생각합니다.

+0

내가 추가 할 경우 당신은 내가 삽입 할 수 있습니다 말했다에 따라 – Dotnet

+0

안녕'마크 Byers' 내가 질문을 데 변경해야 어디에 당신이 말할 수하지 않았다 다중 값은 내가 여러 번 삽입 할 수있는'LoginID'와'RoleID'를 가질 것이라는 것을 의미합니다. – Dotnet

+0

안녕하세요'Login By'는 내 테이블에서 유일해야만 기본 키가됩니다. – Dotnet

0

이 단지/가정을 생각한다, 나는

은 우리가, 자식 테이블을 실행할 때,

PRIMARY KEY ( ID ,) tbluserlogindetail에서

대용 키로 간주됩니다은 loginid, 여기에 공유하고

부모 테이블의 자식 테이블 예상 기본 키

그러나 실제로 우리는 내가 알터을 실행하기 위해 변화를 다음 않았다

, 난,

ALTER TABLE tblroles ADD FOREIGN KEY (LoginID) REFERENCES tbluserlogindetail(LoginID) 

내 대답에 대한 피드백을 제공, 나의 가정이다, 쿼리가 실패 변경으로 인해 이러한 이유 때문에, 대리 키를 생성 테이블 명령 : 1.쿼리 만들기 명령을 주어로 tblroles은 후 내가 수동으로 tbluserlogindetail에 tblroles 테이블의 LoginID 기본 키,은 loginid에서 int로

  1. 변경된 VARCHAR,

  2. 을 삭제 ID AUTO_INCREMENT, Pk의 삭제 생성 만들 .

  3. 확인 내가 업데이트 ALTER 쿼리

관련 문제