데이터 품질 향상
- PRIMARY KEY
- UNIQUE
- NOT NULL
- CHECK
- FOREIGN KEY
PRIMARY KEY
: 특정 컬럼에 중복 데이터, NULL값 입력을 허용하지 않음
테이블 생성 시점 제약 생성
CREATE TABLE tablename
(column1 NUMBER(10) CONSTRAINT tablename_column1_pk PRIMARY KEY,
column2 VARCHAR2(10),
column3 VARCHAR2(20));
: column1에 PRIMARY KEY 제약을 줌으로 중복 데이터와 NULL값을 허용하지 않음
테이블 생성 후 제약 생성
ALTER TABLE tablename
ADD CONSTRAINT tablename_column1_pk PRIMARY KEY(column1);
UNIQUE
: 특정 컬럼에 중복 데이터 입력을 허용하지 않음
테이블 생성 시점 제약 생성
CREATE TABLE tablename
(column1 NUMBER(10),
column2 VARCHAR2(10) CONSTRAINT tablename_column2_UN UNIQUE,
column3 VARCHAR2(10));
: column2에 UNIQUE 제약을 줌으로 중복 데이터 값을 허용하지 않음.
- NULL값 허용
테이블 생성 후 제약 생성
ALTER TABLE tablename
ADD CONSTRAINT tablename_column2_UN UNIQUE(column2);
NOT NULL
: 특정 컬럼에 NULL값 입력을 허용하지 않음
테이블 생성 시점 제약 생성
CREATE TABLE tablename
(column1 NUMBER(10),
column2 VARCHAR2(10),
column3 VARCHAR2(20) CONSTRAINT tablename_column3_NN NOT NULL);
: column3에 NOT NULL 제약을 줌으로 NULL 값을 허용하지 않음.
- 중복 데이터 허용
테이블 생성 후 제약 생성
- 기존 테이블 데이터 중 NULL값이 존재하지 않아야만 생성 가능
ALTER TABLE tablename
MODIFY column3 CONSTRAINT tablename_column3_NN NOT NULL;
CHECK
: 특정 컬럼에 지정 데이터만 허용
CREATE TABLE tablename
(column1 NUMBER(10),
column2 VARCHAR2(10),
column3 NUMBER(10) CONSTRAINT tablename_column3_CK
CHECK (column3 BETWEEN 0 AND 10000));
: column3에 0~10000 사이의 데이터만 입력/수정 허용
FOREIGN KEY
: 특정 컬럼에 지정 데이터만 허용 시 다른 테이블 데이터 참조
CREATE TABLE table1
(column1 NUMBER(10) CONSTRAINT table1_column1_pk PRIMARY KEY,
column2 VARCHAR2(10),
column3 VARCHAR2(20));
CREATE TABLE table2
(column1 NUMBER(10),
column2 VARCHAR2(20),
column3 NUMBER(10),
column4 VARCHAR2(10)
CONSTRAINT table2_column3_FK REFERENCES table1(column1));
: table2의 column3을 입력할 때 table1의 column1 데이터만 허용
- table1이 부모 테이블, table2가 자식 테이블이 됨
- table2의 column3를 입력/수정할 때 table1의 column1에 존재하는 값에 대해서만 가능
- 자식 테이블이 있는 경우 부모 테이블의 제약을 삭제할 수 없음 -> CASCADE 옵션 사용 시 가능
테이블 제약을 삭제하는 방법
일반적인 테이블 제약 삭제
ALTER TABLE tablename
DROP CONSTRAINT tablname_column_CK;
: ALTER TABLE 테이블명 DROP CONSTRAINT 제약명;
부모 테이블 제약 삭제
ALTER TABLE tablename
DROP CONSTRAINT table2_column1_pk CASCADE;
: CASCADE옵션을 사용해 삭제
- 부모 테이블 제약 삭제 시 자식 테이블의 제약이 함께 삭제됨
테이블 제약 확인 방법
SELECT a.CONSTRAINT_NAME, a.CONSTRAINT_TYPE, b.COLUMN_NAME
FROM USER_CONSTRAINTS a, USER_CONS_COLUMNS b
WHERE a.TABLE_NAME='tablename1'
AND a.CONSTRAINT_NAME = b.CONSTRAINT_NAME;
'CS > 데이터베이스' 카테고리의 다른 글
[Oracle] WITH절 (SUBQUERY FACTORING) (0) | 2020.09.25 |
---|---|
[Oracle] WITH절 (WITH ~ AS) (0) | 2020.09.25 |
[Oracle] 데이터 복구 (0) | 2020.09.24 |
[Oracle] 중복되지 않는 번호 (SEQUENCE) (0) | 2020.09.23 |
[Oracle] 검색 속도 향상 (INDEX) (0) | 2020.09.23 |