평행코드

제약조건(CONSTRAINTS) 본문

Oracle Database

제약조건(CONSTRAINTS)

나의 오류는 누군가 겪었던 오류 2023. 10. 9. 14:06

테이블 작성 시 각 컬럼에 기록될 데이터에 대해 제약 조건을 설정할 수 있는데 

이는 데이터 무결성 보장을 주 목적으로 함 입력 데이터에 문제가 없는지에 대한 검사와
데이터 수정/삭제 가능 여부 검사 등을 위해 사용한다.

 

NOT NULL

해당 컬럼에 반드시 값이 기록되어야 하는 경우 사용
특정 컬럼에 값을 저장/수정할 때는 NULL값을 허용하지 않도록
컬럼 레벨에서 제한

CREATE TABLE USER_NOTNULL(
    USER_NO NUMBER NOT NULL,
    USER_ID VARCHAR2(20) NOT NULL,
    USER_PWD VARCHAR2(30) NOT NULL,
    USER_NAME VARCHAR2(30),
    GENDER VARCHAR2(10)
);
UNIQUE

컬럼 입력 값에 대해 중복을 제한하는 제약조건으로
컬럼 레벨과 테이블 레벨에 설정 가능

* 중복 값이 있는 경우 UNIQUE 제약 조건에 의해 행이 삽입되지 않음(NULL 값 중복은 가능)

CREATE TABLE USER_UNIQUE(
    USER_NO NUMBER,
    USER_ID VARCHAR2(20) UNIQUE,
    USER_PWD VARCHAR2(30) NOT NULL,
    USER_NAME VARCHAR2(30)
);

CREATE TABLE USER_UNIQUE2(
    USER_NO NUMBER,
    USER_ID VARCHAR2(20),
    USER_PWD VARCHAR2(30) NOT NULL,
    USER_NAME VARCHAR2(30)
    UNIQUE (USER_ID) --테이블 레벨
);

CREATE TABLE USER_UNIQUE3(
    USER_NO NUMBER,
    USER_ID VARCHAR2(20),
    USER_PWD VARCHAR2(30) NOT NULL,
    USER_NAME VARCHAR2(30),
    UNIQUE (USER_NO, USER_ID) --두 컬럼을 묶어 한 UNIQUE제약조건 설정
);
PRIMARY KEY

테이블에서 한 행의 정보를 구분하기 위한 고유 식별자 역할
NOT NULL의 의미와 UNIQUE의 의미를 둘 다 가지고 있으며
한 테이블 당 하나만 설정 가능
컬럼 레벨과 테이블 레벨 둘 다 지정 가능

CREATE TABLE USER_PRIMARYKEY( 
    USER_NO NUMBER PRIMARY KEY, 
    USER_ID VARCHAR2(20) UNIQUE, 
    USER_PWD VARCHAR2(30) NOT NULL, 
    USER_NAME VARCHAR2(30),
);

CREATE TABLE USER_PRIMARYKEY(
    USER_NO NUMBER,
    USER_ID VARCHAR2(20) UNIQUE,
    USER_PWD VARCHAR2(30) NOT NULL,
    USER_NAME VARCHAR2(30),
    PRIMARY KEY (USER_NO)
);

CREATE TABLE USER_PRIMARYKEY2(
    USER_NO NUMBER,
    USER_ID VARCHAR2(20),
    USER_PWD VARCHAR2(30) NOT NULL,
    USER_NAME VARCHAR2(30),
    PRIMARY KEY (USER_NO, USER_ID)--두 컬럼을 묶어 한 PRIMARY KEY 제약조건 설정
);
FOREIGN KEY

참조 무결성을 위한 제약조건으로
참조된 다른 테이블이 제공한 값만 사용하도록 제한을 거는 것
참조되는 컬럼과 참조된 컬럼을 통해 테이블 간에 관계가 형성되는데
참조되는 값은 제공되는 값 외에 NULL을 사용 가능하며
참조할 테이블의 참조할 컬럼 명을 생략할 경우
PRIMARY KEY로 설정된 컬럼이 자동으로 참조할 컬럼이 됨

 

* 무결성

무결성이란 데이터베이스에서 저장된 값들에 대해 여러가지 제한을 통하여

데이터에 대한 신뢰를 보장하게 하여 일관성을 유지시켜주는 것.

CREATE TABLE USER_FOREIGNKEY(
    USER_NO NUMBER PRIMARY KEY,
    USER_ID VARCHAR2(20) UNIQUE,
    USER_PWD VARCHAR2(30) NOT NULL,
    USER_NAME VARCHAR2(30),
    GENDER VARCHAR2(10),
    PHONE VARCHAR2(30),
    EMAIL VARCHAR2(50),
    GRADE_CODE NUMBER,
    FOREIGN KEY (GRADE_CODE) REFERENCES USER_GRADE(GRADE_CODE)
);
또는
CREATE TABLE USER_FOREIGNKEY(
    USER_NO NUMBER PRIMARY KEY,
    USER_ID VARCHAR2(20) UNIQUE,
    USER_PWD VARCHAR2(30) NOT NULL,
    USER_NAME VARCHAR2(30),
    GENDER VARCHAR2(10),
    PHONE VARCHAR2(30),
    EMAIL VARCHAR2(50),
    GRADE_CODE NUMBER REFERENCES USER_GRADE (GRADE_CODE)
);
CHECK

해당 컬럼에 입력 되거나 수정되는 값을 체크하여 설정된 값 이외의
값이면 에러 발생
비교 연산자를 이용하여 조건을 설정하며 비교 값을 리터럴만 사용 가능하고
변하는 값이나 함수 사용은 불가능

CREATE TABLE USER_CHECK(
    USER_NO NUMBER PRIMARY KEY,
    USER_ID VARCHAR2(20) UNIQUE,
    USER_PWD VARCHAR2(30) NOT NULL,
    USER_NAME VARCHAR2(30),
    GENDER VARCHAR2(10) CHECK (GENDER IN (‘남’, ‘여‘)),
    PHONE VARCHAR2(30),
    EMAIL VARCHAR2(50)
);

 

'Oracle Database' 카테고리의 다른 글

DDL(ALTER, DROP)  (2) 2023.10.22
DML  (0) 2023.10.22
조인문 (JOIN)  (0) 2023.09.28
oracle 데이터조작어, 데이터정의어, 데이터제어어  (0) 2023.09.27
데이터베이스  (0) 2023.09.22