[SQL] ALTER 테이블은 복합 기본 키를 추가하는
SQLALTER 테이블은 복합 기본 키를 추가하는
나는 제공자라는 테이블이 있습니다. 나는 3 열 사람, 장소, 일이라고합니다. 중복 명, 중복 된 장소 및 중복 가지가있을 수 있지만, dupicate 사람 - 장소 - 일 조합이있을 수 없다.
어떻게 ALTER TABLE은이 세 개의 열이있는 MySQL이 테이블 복합 기본 키를 추가하는 것?
해결법
-
==============================
1.
ALTER TABLE provider ADD PRIMARY KEY(person,place,thing);
기본 키가 이미 존재하는 경우에는이 작업을 수행 할 수
ALTER TABLE provider DROP PRIMARY KEY, ADD PRIMARY KEY(person, place, thing);
-
==============================
2.@Adrian 콘월어의 대답은 올바른 것입니다. 그러나, 기존의 기본 키를 삭제 또 다른주의해야 할 점은있다. 그 기본 키는 다른 테이블에서 외래 키로 사용되는 경우 드롭하려고 할 때 오류가 발생합니다. MySQL의 일부 버전에서 오류 메시지가이 오류 메시지는 여전히 (5.5.17의 거기, 부정했다
@Adrian 콘월어의 대답은 올바른 것입니다. 그러나, 기존의 기본 키를 삭제 또 다른주의해야 할 점은있다. 그 기본 키는 다른 테이블에서 외래 키로 사용되는 경우 드롭하려고 할 때 오류가 발생합니다. MySQL의 일부 버전에서 오류 메시지가이 오류 메시지는 여전히 (5.5.17의 거기, 부정했다
alter table parent drop column id; ERROR 1025 (HY000): Error on rename of './test/#sql-a04_b' to './test/parent' (errno: 150).
다른 테이블에 의해 참조되는 것 기본 키를 삭제하려면 먼저 다른 테이블의 외래 키를 삭제해야합니다. 당신은 여전히 그것을 원하는 경우 기본 키를 다시 후에는 외래 키를 다시 만들 수 있습니다.
복합 키를 사용하는 경우에도, 순서는 중요하다. 이들
1) ALTER TABLE provider ADD PRIMARY KEY(person,place,thing); and 2) ALTER TABLE provider ADD PRIMARY KEY(person,thing,place);
같은 것이 아니다. 그들은 모두 차이가 인덱싱 관점에서 그러나, 세 개의 필드의 세트 고유성 적용합니다. 필드 왼쪽에서 오른쪽으로 인덱싱됩니다. 예를 들어, 다음 쿼리를 고려하십시오
A) SELECT person, place, thing FROM provider WHERE person = 'foo' AND thing = 'bar'; B) SELECT person, place, thing FROM provider WHERE person = 'foo' AND place = 'baz'; C) SELECT person, place, thing FROM provider WHERE person = 'foo' AND place = 'baz' AND thing = 'bar'; D) SELECT person, place, thing FROM provider WHERE place = 'baz' AND thing = 'bar';
B는 ALTER 문 1 기본 키 인덱스를 사용할 수 있습니다 A는 ALTER 문 2에 기본 키 인덱스를 사용할 수 있습니다 C 중 하나 인덱스를 사용할 수 있습니다 D 중 하나 인덱스를 사용할 수 없습니다
A는 부분 인덱스로서 인덱스 2의 첫 번째 두 개의 필드를 이용한다. 이 인덱스의 중간 위치 부분을 알고하지 않기 때문에 A는 인덱스 1을 사용할 수 없습니다. 아직하지만 단지 사람에 대한 부분 인덱스를 사용할 수 있습니다.
이 사람을 알고하지 않기 때문에 D 중 하나 인덱스를 사용할 수 없습니다.
자세한 내용은 여기를 MySQL의 문서를 참조하십시오.
-
==============================
3.당신은 단순히 고유 제한 할 수 있습니다. 특히 이미 대리 키가있는 경우. (이미 존재하는 대용 키의 예는 AUTO_INCREMENT 단일 열 것)
당신은 단순히 고유 제한 할 수 있습니다. 특히 이미 대리 키가있는 경우. (이미 존재하는 대용 키의 예는 AUTO_INCREMENT 단일 열 것)
다음은 고유 제한 조건에 대한 SQL 코드는
ALTER TABLE `MyDatabase`.`Provider` ADD CONSTRAINT CK_Per_Place_Thing_Unique UNIQUE (person,place,thing) ;
-
==============================
4.
alter table table_name add primary key (col_name1, col_name2);
-
==============================
5.그것은`은 확실히 더 나은 @GranadaCoder가 제공으로, 조금하지만 까다로운 예를 비트, 복합 UNIQUE KEY를 사용합니다 :
그것은`은 확실히 더 나은 @GranadaCoder가 제공으로, 조금하지만 까다로운 예를 비트, 복합 UNIQUE KEY를 사용합니다 :
ALTER은 (SOME_ID, another_id, one_more_id) table_name 테이블의 ADD 유니크 INDEX의 idx_name를 무시;
-
==============================
6.ALTER의 table_name 테이블 DROP PRIMARY KEY는 PRIMARY KEY (col_name1, col_name2)를 추가;
ALTER의 table_name 테이블 DROP PRIMARY KEY는 PRIMARY KEY (col_name1, col_name2)를 추가;
from https://stackoverflow.com/questions/8859353/alter-table-to-add-a-composite-primary-key by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 안드로이드 SQLite는 : UPDATE 문 (0) | 2020.04.23 |
---|---|
[SQL] 어떻게 Oracle 데이터베이스에 허용되는 최대 연결 수를 확인하려면? (0) | 2020.04.23 |
[SQL] SQLite는 데이터베이스 기본 시간 값 '지금' (0) | 2020.04.23 |
[SQL] SQL Server Management Studio의 테이블 편집 후 변경 사항을 저장 (0) | 2020.04.23 |
[SQL] 어떻게 이름을 몰라도 SQL 기본 제약 조건을 삭제하려면? (0) | 2020.04.22 |