2013-03-06 2 views
31

기존 테이블에 복잡한 고유 키를 추가하려고합니다. 키는 4 개의 필드 (user_id, game_id, 날짜, 시간)를 포함합니다. 그러나 테이블에 고유 한 행이 없습니다. 중복 된 날짜를 모두 제거한 다음 복잡한 키를 추가 할 수 있다는 것을 알고 있습니다.기존 테이블에 고유 키를 추가하는 방법 (고유하지 않은 행이있는 경우)

모든 중복 데이터를 검색하지 않고 다른 해결책이있을 수 있습니다. (예 : 무시 무시 등).

UPD 검색 한 결과, 중복되는 mysql 행을 제거하는 방법은 좋은 해결책이라고 생각합니다. Remove duplicates using only a MySQL query?

+1

( value_code )를 추가합니다. – Tchoupi

답변

75
yAnTar이

당신은 제약

ALTER TABLE TABLE_NAME ADD CONSTRAINT constr_ID UNIQUE (user_id, game_id, date, time) 

을 추가 할 수 있습니다하지만 생각

ALTER TABLE TABLE_NAME ADD Id INT IDENTITY(1,1) PRIMARY KEY 

또는

를 adviced과 같이 할 수

기존 데이터를 잃지 않으면 들여 쓰기 열을 추가 한 다음 합성 키를 만들 수 있습니다.

+0

IDENTITY 열이란 무엇입니까? 나는 AUTO_INCREMENT와 관련된 것을 제외하고는 doc에서 아무 것도 찾을 수 없다 : http://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html – challet

+1

@challet에 의해 언급 된 것처럼 키워드 MySQL에서 IDENTITY가 아니라 AUTO_INCREMENT. http://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html – MER

2

자동 증가 ID 또는 고유 ID를 만들고이를 네 개의 필드로 말하는 자연 키에 추가하십시오. 이 ... 독특한 테이블의 모든 행을 만들 것입니다

3

비즈니스 논리에 대한 가정하에 내 솔루션을 제공하고 있습니다. Basicall 내 디자인에 나는 사용자 - 게임 조합에 대한 하나의 레코드를 저장하는 테이블을 허용합니다. 그래서 테이블에 합성 키를 추가 할 것입니다.

PRIMARY KEY (`user_id`,`game_id`) 
+0

아니, 그것은 나를위한 것이 아닙니다. – yAnTar

7

나는 비슷한 문제를 해결해야했다. 나는 프라이 머리 키를 가지고 있지 않은 거의 15000 개의 레코드를 가진 MS Access로부터 커다란 소스 테이블을 물려 받았다. 나는 그것을 정규화하고 CakePHP와 호환되도록 만들었다. CakePHP의 한가지 규칙은 모든 테이블이 기본 키를 가지고 있다는 것입니다. 첫 번째 컬럼이고 'id'라고합니다. 다음의 간단한 문장은 MySQL의 5.5에서 나를 위해 속임수를 썼는지 :

ALTER TABLE `database_name`.`table_name` 
ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT FIRST, 
ADD PRIMARY KEY (`id`); 

이 기존 데이터 ("FIRST"키워드) 앞에 정수 유형의 새 열 '아이디'를 추가했다. AUTO_INCREMENT 키워드는 1로 시작하는 ID를 증가시킵니다. 이제 모든 데이터 세트에는 고유 한 숫자 ID가 있습니다. AUTO_INCREMENT 문없이 모든 행은 id = 0으로 채워집니다.

0

하나 이상의 NULL 값을 허용하기 때문에 UNIQUE 키를 추가하는 것에주의하십시오. 당신이 고유 키를 생성하는 경우

4

ALTER 표 0_value_addition_setup는 UNIQUE 당신은 중복을 가질 수 없습니다

+6

이 코드는 문제를 해결하는 데 도움이 될 수 있지만 _why_ 및/또는 _how_는 질문에 대답하지 않습니다. 이러한 추가적인 맥락을 제공하면 장기적인 교육적 가치가 크게 향상 될 것입니다. 어떤 제한 사항 및 가정이 적용되는지를 포함하여 설명을 추가하기 위해 답을 [편집하십시오]. –

관련 문제