2011-10-05 3 views
0

테이블의 ID를 다른 고유 한 값으로 변경하려고합니다.sql : 기본 키를 다른 고유 한 요소 목록으로 변경

CREATE TABLE IF NOT EXISTS test (
    id int(11) NOT NULL, 
    reverse_id int(11) NOT NULL, 
    PRIMARY KEY (id), 
    UNIQUE KEY reverse_id (reverse_id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

INSERT INTO test (id, reverse_id) VALUES ('1', '2'), ('2', '1'); 

UPDATE test SET id = reverse_id; 

# Duplicate entry '2' for key 'PRIMARY' 

난 단지 아이디 요소의 고유성에 대한 UPDATE의 끝에서 검사 명령을 찾고 : 이 단순화 된 예입니다.

[두 번째 행을 만들고이 행의 상태를 기본으로 변경 한 다음 ID를 업데이트하고 기본 상태를 재설정 할 수 있음을 알고 있지만 다른 행을 추가하거나 변경하지 않고 하나의 명령을 갖고 싶습니다. , 테이블]

+0

기본 키를 삭제할 수 있지만 MySQL은 단순히 숨겨진 정수 기본 키를 생성하여 요구 사항을 위반하게됩니다. – Johan

답변

0

reverse_id을 기본 키로 갖는 테이블을 만들면 어떻게됩니까? - 그것은 정의에서 고유하므로 기본 키에 대한 유효한 후보입니다.

기본 키는 정의에 의해 고유 -이 제약은

1

이 내가 아는 한 MySQL과 수 없습니다 원하는 것을 달성에서 당신을 중지하고 있습니다.

문 수준에서 제약 조건을 평가하지 않습니다 (처리하는 동안 행 수준의 제약 조건을 수행하지 않음). 또한 제약 조건을 지연 시간으로 정의 할 수 없으므로 제약 조건이 커밋시 평가됩니다.

기본 키의 번호를 다시 지정하려면 기본 키를 삭제하고 ID의 번호를 다시 지정한 다음 기본 키를 다시 만드십시오.

관련 문제