2012-09-05 3 views
-1

내가MySQL의 그룹화 행

ID | PRODUCT 
1 | Apples 
1 | Oranges 
1 | Bananas 
2 | Walnuts 
2 | Almonds 
3 | Steak 
3 | Chicken 

이 MySQL은 설치의 유형을 가질 수 있습니다을 말해봐? 테스트 테이블을 만들고 기본 인덱스와 자동 증가 ID 열을 만들었습니다. 동일한 ID를 가진 몇 개의 행을 삽입하려고하면 mysql이 오류를 반환합니다.

mysql에서 가능합니까?

+1

기본 키의 전체 지점입니다. 정의에 따라 고유해야합니다. 고유하지 않은'ID'가 필요할 경우 PK로 정의하지 마십시오. 당신이 단지'CREATE TABLE 제품 (ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT, GROUP_ID INT NOT NULL, PRODUCT VARCHAR())을 원한다고 들리는데, –

+0

@MichaelBerkowski는 완전히 맞습니다. 대신 id 열을 건드리지 않고 대신이 항목에 대한 새 항목을 만들거나 ** uid **와 같은 기본 이름으로 바꾸고 ** id **라는 이름의 보조 (비 PK)를 만듭니다. – inhan

답변

1

ID을 기본 키로 설정하면 중복 기록 (ID) INSERTED은 어떻게 발생 했습니까? 기본적으로 그렇지 않습니다. 기본 키는 UNIQUE입니다. 이 기록은 그렇게되고 싶은 경우에, UNIQUE 제약 조건이 중복 행을 피하기 위해 이렇게 추가 된 기본 키

CREATE TABLE sampleTable 
(
    ID INT NOT NULL AUTO_INCREMENT, 
    GROUP_ID INT NOT NULL, 
    PRODUCT VARCHAR(25), 
    CONSTRAINT pk_name PRIMARY KEY (ID), 
    CONSTRAINT uq_name UNIQUE (GROUP_ID, PRODUCT) 
) 

역할을 다른 열을합니다.

0

가능하지만 반복 기본 키가 있으므로 정규화되지 않습니다. 기본 키는 고유해야하며 1은 한 번만 발생할 수 있습니다. 각 product에 대해 ID의 사용자 정의가있는 경우 복합 기본 키 (id, product) 또는 대리 키를 사용하십시오. 서로 게이트 키는 행을 고유하게 식별하는 자동 증가 열입니다. 귀하의 표는 다음과 같을 것이다 :이이 독특한 것을 의미로

CREATE TABLE fruits (
    auto_id int AUTO_INCREMENT PRIMARY KEY, 
    id int, 
    product varchar(15)) 
0

당신은 ID 컬럼에 대한 기본 키를 만들 수 없습니다. 예를 들어 일반 색인을 가져 가십시오.

반면에 대부분의 경우 기본 키를 사용하는 것이 좋으므로 일반 INDEX가있는 세 번째 행 (GENRE?)을 추가하고 기본 키를 그대로 두는 것이 좋습니다.

데이터를 삽입 할 때 GENRE와 PRODUCT를 삽입하면 ID가 자동으로 입력됩니다.