2009-05-25 10 views

답변

8

볼이 MSDN article :

데이터베이스 엔진이 자동으로 가 UNIQUE 제약의 고유성 요구 사항을 적용 할 수있는 UNIQUE 인덱스를 생성합니다. 당신이 인덱스를 생성 할 경우이 예제가 보여로

, 당신은 두 개의 인덱스를하게 될 겁니다 :

이 TestTable에 두 개의 고유 인덱스를 표시합니다
create table TestTable (id int) 
alter table TestTable add constraint unique_id unique (id) 
create unique index ix_TestTable_id on TestTable (id) 

select * from sys.indexes where [object_id] = object_id('TestTable') 

; 테이블 자체를 나타내는 HEAP

1

당신이 고유 제한 조건 추가 할 때 색인이 생성됩니다

Reference을 - 두 번째 단락을 참조하십시오. UNIQUE 제약 조건은 기본적으로 에 테이블의 기존 열 또는 열을 추가

는 데이터베이스 엔진은 컬럼에있는 기존 데이터가 모든 값이 고유 확인하기 위해 검사합니다. 중복 값이 ​​ 인 열에 UNIQUE 제약 조건 인 이 추가되면 데이터베이스 엔진은 오류를 반환하고 제약 조건을 추가하지 않습니다.

데이터베이스 엔진은 자동으로 는 UNIQUE 제약의 고유성 요구 사항을 적용 할 수있는 UNIQUE 인덱스를 생성합니다. 따라서 중복 행을 삽입하려는 시도가 발생하면 데이터베이스 엔진이 고유 한 제약 조건을 위반했음을 나타내는 메시지를 반환하고 행을 테이블에 추가하지 않습니다. 클러스터 된 인덱스가 명시 적으로 으로 지정되어 있지 않으면 고유 한 클러스터되지 않은 인덱스가 기본적으로 UNIQUE 제약 조건을 적용하도록 만들어집니다.

2

예.

사실, 당신도 만들 수 CLUSTERED UNIQUE CONSTRAINT : 테이블 col1에 클러스터링 할 수 있도록합니다

ALTER TABLE mytable ADD CONSTRAINT UX_mytable_col1 UNIQUE CLUSTERED (col1) 

.

거의 모든 데이터베이스가 UNIQUE CONSTRAINT에 대한 색인을 생성합니다. 그렇지 않으면 유지 관리가 매우 어려울 수 있습니다.

OracleUNIQUE CONSTRAINTUNIQUE INDEX을 구별하지 않습니다. 하나의 명령은 다른 명령과 동의어입니다.

Oracle의 유일한 차이는 UNIQUE CONSTRAINT이 시스템에서 생성 이름으로 생성 될 수있는 동안 UNIQUE INDEX는, 사용자가 제공 한 이름을 가져야한다는 것이다 :

ALTER TABLE mytable MODIFY col1 UNIQUE 

SYS_CXXXXXX이라는 인덱스를 생성한다.

+1

열을 고유하게 만들면 열이 이미 색인화되어 있으면 고유 색인이 작성되지 않습니다. 고유하지 않은 색인으로 고유 제한을 경고 할 수 있기 때문에 (보통 권장하지는 않지만) –

+0

클러스터 된 제약 조건은 SQL Server에서도 작동합니다. 예 : – Andomar

+0

@Andomar : 예, 클러스터 된 제약 조건을 설명하는 데 사용한 SQL Server입니다. 오라클은이 항목을 INDEX ORGANIZED TABLE이라고합니다. – Quassnoi

관련 문제