테스트를 위해 아래와 같이 테이블을 생성하자.
-- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1 NUMBER, c2 NUMBER, c3 NUMBER);
PK 생성시 제약조건을 검증할 수 있는 인덱스가 없다면 UNIQUE 인덱스가 자동으로 생성된다.
-- 2 ALTER TABLE t1 ADD CONSTRAINT t1_pk PRIMARY KEY (c1); SELECT index_name FROM user_constraints WHERE constraint_name = 'T1_PK'; INDEX_NAME ---------- T1_PK 1개의 행이 선택되었습니다.
제약조건을 검증할 수 있는 인덱스가 있다면 가장 먼저 생성된 인덱스를 사용한다. 아래 예제에서는 NONUNIQUE 인덱스인 t1_x1 인덱스를 사용했다.
-- 3 CREATE INDEX t1_x1 ON t1 (c1, c2); CREATE UNIQUE INDEX t1_pk ON t1 (c1); ALTER TABLE t1 DROP CONSTRAINT t1_pk; ALTER TABLE t1 ADD CONSTRAINT t1_pk PRIMARY KEY (c1); SELECT index_name FROM user_constraints WHERE constraint_name = 'T1_PK'; INDEX_NAME ---------- T1_X1 1개의 행이 선택되었습니다.
아래처럼 USING INDEX 절을 사용하여 사용할 인덱스를 명시적으로 지정하는 편이 바람직하다.
-- 4 ALTER TABLE t1 DROP CONSTRAINT t1_pk; ALTER TABLE t1 ADD CONSTRAINT t1_pk PRIMARY KEY (c1) USING INDEX t1_pk; SELECT index_name FROM user_constraints WHERE constraint_name = 'T1_PK'; INDEX_NAME ---------- T1_PK 1개의 행이 선택되었습니다.
- UNIQUE 제약조건도 마찬가지다. [본문으로]
'Oracle > Administration' 카테고리의 다른 글
EDITIONING 뷰 테스트 (0) | 2012.05.31 |
---|---|
CHECK 제약조건 적용 사례 (0) | 2012.05.22 |
RANGE 파티션 통계정보 관리 패키지 (0) | 2012.05.10 |
INVISIBLE 인덱스 (0) | 2012.05.02 |
DDL TRIGGER 감사 기능 (0) | 2012.05.01 |