2014-01-22 1 views
1

Mysql Workbench를 사용하고 있습니다. 나는 이미 식탁을 만들었습니다. 이제 외래 키를 Personal_Details이라는 테이블에 추가하려면 Login 테이블의 키가 기본 키입니다.외래 키를 추가하는 중 오류가 발생했습니다.

그러나 나는 그렇게하려고 할 때, 그것은 나에게 다음과 같은 오류를 보여줍니다

ERROR 1005: Can't create table 'shaadiDB.#sql-404_25' (errno: 121) 

SQL 문 :

ALTER TABLE `shaadiDB`.`Personal_Details` 
    ADD CONSTRAINT `Login_Id` 
    FOREIGN KEY (`Login_Id`) 
    REFERENCES `shaadiDB`.`Login` (`Login_Id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION 
, ADD INDEX `Login_Id` (`Login_Id` ASC) 
+0

"* 자주 발생하는 *"이란 무엇을 의미합니까? 테이블 구조를 자주 바꾸고 있습니까? –

+0

아니요, 자주 테이블을 변경하지 않습니다 – AM26

답변

0

에 의해 표 1에 다시 모든 행을 추가 할 필요가 밖으로 데이터를 제한 추가하려고

+0

게시 된 오류는 데이터 중복 때문이 아니라 키 이름 중복. –

1

이 테이블 Personal_Details 데 데이터가있는가 있습니다 것 같다 Login_Id가있는 일부 행이 테이블 Login에 없습니다.

이 경우 데이터를 다른 테이블로 이동 한 다음 제한 조건을 추가해야 할 수 있습니다. 제약 조건을 추가 한 후 어떤 이미이 문제가 발생할 수있는 몇 가지 데이터를 테이블에 제약을 추가하기 전에 1.

+0

인덱스 열을 선택할 수 없습니다 ... 왜 그 일이 발생합니까?! – AM26

+0

@ AM26 Am은 내가 받아 들인 대답을 재검토하게 만든 것에 놀라움을 금치 못했다. 단지 일반 진술이 아닌 Constraint를 어떻게 추가 할 수 있는지 설명했다. 덧붙여 – Akshay

1

오류 121 :이 오류는 키 이름이 중복되면 명시 적으로 발생합니다.

Alter ... 문을 실행 한 직후에 다음을 실행하고 결과를 관찰하십시오.

SHOW ENGINE InnoDB STATUS; 

설명 텍스트는 중복이 발견 된 키 이름을 알려줍니다. 에 따라 ALTER ... 문을 수정하고 실행하십시오. 이러한 중복 키 이름을 실행하여 정의 된 경우

은 다른 방법도 찾을 수 있습니다

select constraint_name, constraint_type, table_name 
from information_schema.table_constraints 
where table_schema = DATABASE() -- and constraint_type = 'foreign key' 

제약 유형 등 PRIMARY KEY 같은 것을, FOREIGN KEY 될 수

당신은 어떤 키 이름에 표시되는 경우 ALTER .. 문에서 사용하려고 시도한 결과를 수정하고 실행해야합니다.