MySQL-기존 필드를 고유하게 만들기


155

고유해야하지만 그렇지 않은 필드가있는 기존 테이블이 있습니다. 나는 이미 존재하는 다른 항목과 동일한 값을 가진 테이블에 항목이 작성되어 문제가 발생했기 때문에 이것을 알고 있습니다.

이 필드가 고유 한 값만 허용하도록하려면 어떻게합니까?

답변:


293
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

MySQL 5.7.4 이상의 경우 :

ALTER TABLE mytbl ADD UNIQUE (columnName);

MySQL 5.7.4부터 ALTER TABLE에 대한 IGNORE 절이 제거되고 사용시 오류가 발생합니다.

따라서 IGNORE 키워드가 더 이상 지원되지 않으므로 중복 항목을 먼저 제거하십시오.

참고


62
+1 If IGNORE is specified, only the first row is used of rows with duplicates on a unique key, The other conflicting rows are deleted. 문서
스크럼 마이스터

1
특정 기준에 따라 행을 삭제하도록 지시하는 방법이 있습니까? 또는 ALTER이 작업을 수행 하기 전에 사전 처리를 수행해야합니다 .
corsiKa

7
ALTER IGNORE데이터 안전을 위해 MySQL 버전> 5.5 및 InnoDB에서 여전히 중복 오류가 발생할 수 있습니다. 복제 된 행 중 첫 번째 행을 유지하는 것이 올바른지 확인하려면을 시도하십시오 set session old_alter_table=1. 다시 설정하는 것을 잊지 마십시오. mysqlolyk.wordpress.com/2012/02/18/…
michaelliu

2
5.6.7 이상을 사용하여이 문제를 해결하려는 경우 IGNORE가 더 이상 지원되지 않습니다. moredocs 지금 할 수있는 방법은 먼저 복제본이 없는지 확인하는 것입니다.
William T. Mallard

1
이 조회를 실행하기 전에 테이블의 백업 사본을 작성하십시오. 열 이름이 같거나 비어있는 경우 첫 번째 행을 제외한 모든 행을 삭제합니다.
steady_daddy


16

제약 조건의 이름도 지정하려면 다음을 사용하십시오.

ALTER TABLE myTable
  ADD CONSTRAINT constraintName 
    UNIQUE (columnName);


4

가장 쉽고 빠른 방법은 phpmyadmin 구조 테이블을 사용하는 것입니다.

PHPMYADMIN 관리자 패널을 사용하십시오!

러시아어로되어 있지만 영어 버전은 동일해야합니다. 고유 버튼을 클릭하십시오. 또한 거기에서 열을 PRIMARY 또는 DELETE로 만들 수 있습니다.


2
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

정답입니다

삽입 부

INSERT IGNORE INTO mytable ....

1

이 코드는 기존 테이블의 고유 키를 설정하기 위해 문제를 해결하는 것입니다.

alter ignore table ioni_groups add unique (group_name);

그러나 기둥 외부의 복제본을 포함하여 모든 복제본을 제거합니다
Biasi Wiga
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.