PK는 Primary Key라고 불리며 기본키로 번역되서 불립니다.
특징으로는 테이블 컬럼 내의 유일한 값(Unique)과 빈 값이 없는(Not Null) 특징을 가지고 있습니다.
즉, 각 값들의 특징을 구분할 수 있는 유일한 값이 PK의 값이 되는것이죠.
예를들어, 고객의 테이블에서 주민등록번호는 PK가 될 수 있습니다. 한 사람당 유일한 값을 가지는 값이기 때문입니다.
그리고 PK 설정시 자동적으로 Unique Index를 생성하여 줍니다.
Oracle의 경우 PK와 같은 컬럼의 Unique Index가 존재 시 따로 생성하지 않고 기존에 있는 Unique Index를 사용합니다.
아래의 테스트를 통하여 PK 컬럼추가에 대한 테스트를 실습해보겠습니다.
PK는 alter table modify 명령어로 수정할 수 없습니다. 따라서 삭제 후 재생성을 해주어야 합니다.(Drop&Add)
ORA-01449
ora-01449 column contains null values cannot alter to not null |
[원인] ※ PK 재생성 작업시 컬럼에 데이터가 NULL 값이 존재 [해결1] ※ 컬럼 작업 시 DEFAULT '(어떠한 값)' NOT NULL ㅁ 기존에 있는 데이터까지 default로 변경될 수 있으니 주의 ※ ADD 컬럼 추가 -> UPDATE -> MODIFY |
테스트 작업
--1. 테스트 테이블 생성
create table test.employees
as
select *
from hr.employees;
--2. table PK 생성
--> CTAS로 테이블 복사 한 경우 PK는 복사되지 않아서 생성
select *
from dba_constraints
where table_name='EMPLOYEES'
and owner='TEST';
CREATE UNIQUE INDEX TEST.EMP_EMP_ID_PK ON TEST.EMPLOYEES (EMPLOYEE_ID);
ALTER TABLE TEST.EMPLOYEES ADD CONSTRAINT EMP_EMP_ID_PK PRIMARY KEY (EMPLOYEE_ID);
--TEST EMP_EMP_ID_PK EMPLOYEES EMPLOYEE_ID 1
--3. TEST.EMPLOYEES에 컬럼 추가
ALTER TABLE TEST.EMPLOYEES ADD ETC VARCHAR2(1);
--4. PK 재생성
ALTER TABLE TEST.EMPLOYEES DROP PRIMARY KEY;
DROP INDEX TEST.EMP_EMP_ID_PK;
CREATE UNIQUE INDEX TEST.EMP_EMP_ID_PK ON TEST.EMPLOYEES (EMPLOYEE_ID,ETC);
ALTER TABLE TEST.EMPLOYEES ADD CONSTRAINT EMP_EMP_ID_PK PRIMARY KEY (EMPLOYEE_ID,ETC);
--> "ORA-01449 발생"
--5. 컬럼 수정 (나같은 경우 테스트 서버로 DROP COLUMN 후 DEFAULT 적용)
ALTER TABLE TEST.EMPLOYEES DROP COLUMN ETC;
ALTER TABLE TEST.EMPLOYEES ADD ETC VARCHAR2(1) DEFAULT 'N' NOT NULL;
--6. PK 재생성
ALTER TABLE TEST.EMPLOYEES DROP PRIMARY KEY;
DROP INDEX TEST.EMP_EMP_ID_PK;
CREATE UNIQUE INDEX TEST.EMP_EMP_ID_PK ON TEST.EMPLOYEES (EMPLOYEE_ID,ETC);
ALTER TABLE TEST.EMPLOYEES ADD CONSTRAINT EMP_EMP_ID_PK PRIMARY KEY (EMPLOYEE_ID,ETC);
'DB > Oracle' 카테고리의 다른 글
[VIEW] DBA_TABLES (0) | 2024.03.25 |
---|---|
[VIEW] DBA_TAB_STATISTICS (0) | 2024.03.25 |
[Tuning] 오라클 힌트(Hint) 개념 및 사용 방법 (0) | 2023.07.24 |
[Admin] DBLINK (0) | 2023.05.31 |
[MIG] Oracle 12c rac to single clond DB (수정중) (0) | 2023.04.14 |