개키우는개발자 : )

[오라클] 데이터베이스 객체의 종류-제약조건 본문

Oracle SQL Developer/오라클SQL과 PL-SQL

[오라클] 데이터베이스 객체의 종류-제약조건

DOGvelopers 2019. 2. 17. 23:57
반응형

제약조건


제약조건(Constraints)은 컬럼에 대한 속성 형태로 정의하지만 엄연히 오라클 데이터베이스 객체 중 하나이며 데이터 무결성을 보장하기 위한 용도로 사용된다. 제약조건에는 NOT NULL, UNIQUE, 기본키, 외래키, CHECK 등이 있다.


1. NOT NULL


1
컬럼명 데이터타입 NOT NULL
cs



테이블 생성,입력,조회


실습) NOT NULL 제약조건을 걸고 데이터값 NULL값 으로 입력하기


- 생성


1
2
3
4
CREATE TABLE EX2_5(
    COL_NULL VARCHAR2(10),
    COL_NOT_NULL VARCHAR2(10NOT NULL
);
cs


- 입력


1
INSERT INTO EX2_5 VALUES ('AA','');
cs



- 결과


1
ORA-01400: NULL을 ("STUDY_USER"."EX2_5"."COL_NOT_NULL") 안에 삽입할 수 없습니다
cs


- 재입력


1
INSERT INTO EX2_5 VALUES ('AA','BB');
cs


- 조회


1
2
SELECT constraint_name, constraint_type,table_name,search_condition
    FROM user_constraints WHERE table_name = 'EX2_5';
cs


- 결과


ex2_5 테이블 제약조건 타입 이미지ex2_5 테이블 제약조건 타입


사용자가 생성한 제약조건의 설정들을 확인 하기 위해 USER_CONSTRAINTS 시스템 뷰에서 확인할 수 있다.




2. UNIQUE


UNIQUE 제약조건은 말 그대로 해당 컬럼에 들어가는 값이 유일해야 한다는 의미다. 즉 중복 값을 허용하지 않는다.


1
2
3
컬럼명 데이터타입 UNIQUE
혹은
CONSTRAINTS 제약조건명 UNIQUE(컬럼명,...)
cs



테이블 생성,입력,조회


실습) NOT NULL , UNIQUE 제약조건 기능 확인하기


- 생성


1
2
3
4
5
6
CREATE TABLE EX2_6(
    COL_UNIQUE_NULL VARCHAR2(10UNIQUE,
    COL_UNIQUE_NNULL VARCHAR2(10UNIQUE NOT NULL,
    COL_UNIQUE VARCHAR2(10),
    CONSTRAINTS unique_nm1 UNIQUE (COL_UNIQUE)
);
cs


- 조회


1
2
3
SELECT constraint_name, constraint_type, table_name, search_condition
    FROM user_constraints
WHERE table_name = 'EX2_6';
cs


- 결과


ex2_6 테이블 제약조건 타입 이미지ex2_6 테이블 제약조건 타입


CONSTRAINT_NAME 에 UNIQUE_NM1 이라는 제약조건명이 생성됐음을 확인할 수 있다.


- 입력


두번 연속으로 실행시켜보면 AA의 값이 두번 입력된다.


1
INSERT INTO EX2_6 VALUES ('AA','AA','AA');
cs


- 결과


AA의 값이 중복으로 들어갈 수 없기때문에 무결성 오류가 발생한다.


1
2
오류 보고 -
ORA-00001: 무결성 제약 조건(STUDY_USER.SYS_C0014534)에 위배됩니다
cs


- 입력


1
INSERT INTO EX2_6 VALUES ('','BB','BB');
cs


- 입력


1
INSERT INTO EX2_6 VALUES ('','CC','CC');
cs



분명 UNIQUE는 중복을 허용하지 않는데 왜 '' 의 NULL 값은 중복으로 값이 허용될까?

NULL은 값이 없음을 의미하기 때문에 비교대상에서 NULL은 제외된다. 



3. 기본키


기본키(Primary key)UNIQUE와 NOT NULL 속성을 동시에 가진 제약조건으로, 

테이블 당 1개의 기본키만 생성할 수 있다.


1
2
3
컬럼명 데이터타입 PRIMARY KEY
혹은
CONSTRAINTS 제약조건명 PRIMARY KEY(컬럼명,...)
cs



테이블 생성,입력,조회


실습) Primary key 제약조건의 기능 확인하기


- 생성


1
2
3
4
CREATE TABLE EX2_7(
    COL1 VARCHAR2(10PRIMARY KEY,
    COL2 VARCHAR2(10)
);
cs


- 조회


1
2
3
SELECT constraint_name, constraint_type, table_name, search_condition
    FROM user_constraints
WHERE table_name = 'EX2_7';
cs


- 결과


ex2_7 테이블 제약조건 타입 이미지ex2_7 테이블 제약조건 타입


- 입력


1
INSERT INTO EX2_7 VALUES ('','AA');
cs


- 결과


NOT NULL 제약조건인 NULL값을 삽입할 수 없습니다 라는 오류가 발생한다.


1
2
오류 보고 -
ORA-01400: NULL을 ("STUDY_USER"."EX2_7"."COL1") 안에 삽입할 수 없습니다
cs


- 입력


두번 연속 값을 입력합니다.


1
INSERT INTO EX2_7 VALUES ('AA','AA');
cs


- 결과


UNIQUE 제약조건인 중복값을 삽입할 수 없습니다 라는 오류가 발생한다.


1
2
오류 보고 -
ORA-00001: 무결성 제약 조건(STUDY_USER.SYS_C0014537)에 위배됩니다
cs


CONSTRAINTS 키워드를 사용하여 여러 컬럼을 하나의 기본키로 만들 수도 있다.

예) CONSTRAINT PK_JOB_HISTORY PRIMARY KEY (EMPLOYEE_ID,START_DATE) 형식


보통 테이블을 만들 때 특수한 경우를 제외하고 기본키는 반드시 생성하는 것이 원칙이다.



4. 외래키


외래키(Foreign key) 는 테이블 간의 참조 데이터 무결성을 위한 제약조건이다.


1
2
CONSTRAINT 외래키명 FOREIGN KEY(칼럼명,...)
REFERENCES 참조테이블(참조테이블 컬럼명,...)
cs


외래케에 대한 제약사항은 다음과 같다.


- 반드시 참조하는 테이블 먼저 생성되어야 하며, 참조키가 참조 테이블의 기본키로 만들어져 있어야한다.

- 외래키에 사용할 수 있는 컬럼 개수는  최대 32개다.

- 여러 컬럼을 외래키로 만들려면, 참조하는 컬럼과 외래키 컬럼의 순서와 개수는 같아야 한다.



5. CHECK


CHECK는 컬럼에 입력되는 데이터를 체크해 특정 조건에 맞는 데이터만 입력 받고 그렇지 않으면 오류를 뱉어 낸다.


1
CONSTRAINT 체크명 CHECK(체크조건)
cs


테이블 생성,입력,조회


실습) CHECK 조건문 기능 확인


- 생성


1
2
3
4
CREATE TABLE EX2_8(
    num1 NUMBER CONSTRAINT check1 CHECK (num1 BETWEEN 1 AND 9),
    gender VARCHAR(10CONSTRAINT check2 CHECK (gender IN ('MALE','FEMALE'))
);
cs


- 조회


1
2
3
SELECT constraint_name, constraint_type, table_name, search_condition
    FROM user_constraints
WHERE table_name = 'EX2_8';
cs


- 결과


ex2_8 테이블 제약조건 타입 이미지ex2_8 테이블 제약조건 타입


- 입력


1
INSERT INTO EX2_8 VALUES (10,'MALE');
cs


- 결과


1
2
오류 보고 -
ORA-02290: 체크 제약조건(STUDY_USER.CHECK1)이 위배되었습니다
cs


- 입력


1
INSERT INTO EX2_8 VALUES (5,'MALE');
cs

- 결과


1
1 행 이(가) 삽입되었습니다.
cs




6. DEFAULT


DEFAULT 제약조건에는 포함되지 않지만 칼럼 속성 중 하나로 컬럼속에 DEFAULT 디폴트 값 형식으로 기술하면 자동으로 디폴트 값이 들어간다.



테이블 생성,입력,조회


실습) CHECK 조건문 기능 확인


- 생성


1
2
3
4
5
CREATE TABLE EX2_9(
    COL1 VARCHAR(10NOT NULL,
    COL2 VARCHAR(10NULL,
    CREATE_DATE DATE DEFAULT SYSDATE
);
cs


- 입력


두번째 입력에선 2개의 컬럼 값만 입력했다.


1
2
INSERT INTO EX2_9 VALUES ('AA','BB',DEFAULT);
INSERT INTO EX2_9(COL1,COL2) VALUES ('CC','BB');
cs


- 조회


1
SELECT * FROM EX2_9;
cs


- 결과


두번째 결과에서 SYSDATE 값이 입력된 것을 볼 수 있다.


DEFAULT 조회 이미지DEFAULT 조회

반응형
Comments