2016-11-01 2 views
2

나는MySQL의 오류 1215 추가 할 수 없습니다 외래 키 제약

---------+------------+---------+-------+---------+--------+ 
    Field | type  | NULL | Key | Deault | Extra | 
------------------------------------------------------------ 
user_id | varchar(50)|  NO | PRI | NULL |  | 

다음과 같이 나 또한 형식의 테이블 history을 다음과 같이 테이블 users 포맷이 다음 명령을받습니다. error code 1215: cannot add foreign key constraint.

ALTER TABLE history 
ADD FOREIGN KEY (id) 
REFERENCES users(user_id) 

항목이 history에 삽입 된 경우 id이 삽입되어 user_idusers에 일치하도록합니다. history.id의 외래 키 users.user_id을 작성하려면 어떻게해야합니까?

답변

1

코드는 정확하지만 데이터 유형이 정확히 일치해야합니다. 작동하지 않으므로 varchar 열에 대해 다른 데이터 정렬을 사용하는 것이 가장 가능성이 큽니다.

describe을 사용할 때 데이터 정렬이 표시되지 않으므로 show create table usersshow create table history을 사용하여 확인하고 서로 일치하도록 데이터 정렬 중 하나를 조정하십시오.

1

문제는 history.id에 대한 색인이 생성되지 않았기 때문일 수 있습니다. 외래 키 제약 조건을 추가하려면 특정 열을 인덱싱해야합니다. 당신의 역사 (당신이 테이블을 다시 작성하고자하는 경우) 스크립트를 작성에서

, 제약 조건을 추가하기 전에 당신은 입력 할 수

INDEX 'id_index' ('id', ASC) 

또는 현재 테이블을 변경하는 그냥 입력 :

CREATE INDEX id_index 
ON history(id,ASC) 

"ASC"는 오름차순으로 색인 될 것임을 의미합니다.

현재 색인에 대한 자세한 내용을보실 수 있습니다 : http://dev.mysql.com/doc/refman/5.7/en/create-index.html

은 현재의 MySQL에서 외래 키에 대해 읽을 수 있습니다 단지 철저로, 또한 https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html

, 당신은 "ID"를 사용하려고 시도되지 않도록 외래 키 이름은 고유해야하므로 외래 키로 두 번 이상 지정해야합니다.

관련 문제