[Oracle]무결성(Constraint) 제약 조건

2021. 5. 31. 21:45·데이터베이스/Oracle
반응형

무결성? 

데이터베이스에 저장된 값들이 정확하고 일관성 있는 데이터임을 나타내는 의미!

(COLUMN을 지정하는 성질. 설정)

 

제약조건?

바람직하지 않은 데이터가 저장되는 것을 방지하는 것을 의미

즉, 잘못된 데이터가 입력되지 않도록 무결성 제약 조건을 지정

 

데이터 무결성 제약 조건(Data Integrity Constraint Rule)이란 테이블에 부적절한 자료가 입력되는 것을 방지하기 위해서 테이블을 생성할 때 각 컬럼에 대해서 정의하는 여러 가지 규칙을 말합니다.

 

제약조건의 종류

무결성 제약 조건 의미 형식
Primary key (기본키) -중복을 허용하지 않는다.
-NULL을 허용하지 않는다.

UNIQUE + NOT NULL

ex)ID, 주민등록번호
CONSTRAINT 제약조건명
PRIMARY KEY (컬럼명) 
Unique key (고유키) -중복을 허용하지 않는다.
-NULL을 허용

ex) E-mail
CONSTRAINT 제약조건명
UNIQUE (컬럼명)
Foreign key (외래키) -Join(테이블과 테이블의 연결)이 목적
-NULL을 허용

외래키로 지정된 컬럼은 연결된 테이블에서 PK나 UK로 설정되어 있어야 한다.
CONSTRAINT 제약조건명 FOREIGN KEY (컬럼명)
REFERENCES 참조 테이블명 (컬럼명)
CHECK 범위를 지정. 지정된 값외에 사용할 수 없다.
NULL을 허용
CONSTRAINT 제약조건명
CHECK(범위)
NOT NULL NULL을 허용하지 않는다. 컬럼명 타입 NOT NULL

 

A. Primary key

CREATE TABLE TB_TEST06(
    PK_COL VARCHAR2(10),
    --기본키는 하나만 가능하다!.
    COL1 VARCHAR2(20),
    COL2 VARCHAR2(20)
    CONSTRAINT PK_TEST_01 PRIMARY KEY (PK_COL, COL1) --이런식으로 하면 2개가 가능하다.
);

한 테이블에 PK가 2개이상 가질 수 있다.

예를 들어서 학생 테이블에 학번과,  주민등록번호가 동시에 존재하는 경우!

 

B. Unique key

CREATE TABLE TB_TEST06(
    UK_COL VARCHAR2(10),
    COL VARCHAR2(20),
    COL2 VARCHAR2(20),
    CONSTRAINT UK_TEST_01 UNIQUE(UK_COL)
);

 

C. Foreign key

--Parent table 
--만약 부서테이블에서 부서ID가 PK로 존재할때!
CREATE TABLE TB_DEPT( 
    DEPARTMENT_ID VARCHAR(10),
    DEPARTMENT_NAEM VARCHAR(20),
    LOCATION_ID NUMBER,
    CONSTRAINT PK_DEPT_TEST PRIMARY KEY (DEPARTMENT_ID)
);

INSERT INTO TB_DEPT(DEPARTMENT_ID, DEPARTMENT_NAEM, LOCATION_ID)
VALUES ('10','기획부',120);

INSERT INTO TB_DEPT(DEPARTMENT_ID, DEPARTMENT_NAEM, LOCATION_ID)
VALUES ('20','관리부',150);

INSERT INTO TB_DEPT(DEPARTMENT_ID, DEPARTMENT_NAEM, LOCATION_ID)
VALUES ('30','개발부',180);

--Child table 
--Foreign key 설정
CREATE TABLE TB_EMP(
    EMPNO VARCHAR2(10),
    ENAME VARCHAR2(20),
    DEPARTMENT_ID VARCHAR2(10), --컬럼명은 동일하지 않아도 된다. 가급적 동일하게 사용!
    CONSTRAINT FK_EMP_TEST FOREIGN KEY (DEPARTMENT_ID)
        REFERENCES TB_DEPT(DEPARTMENT_ID)
);

INSERT INTO TB_EMP (EMPNO, ENAME, DEPARTMENT_ID)
VALUES ('100','홍길동','10'); --DEPARTMENT_ID는 10,20,30 중 하나만 입력이 가능하다. (있는 값으로)

INSERT INTO TB_EMP (EMPNO, ENAME, DEPARTMENT_ID)
VALUES ('103','홍두께',''); -- 외래키는 NULL 가능.

 

D. Check

CREATE TABLE TB_CHECK(
    COL1 VARCHAR2(10),
    COL2 VARCHAR2(20),
    CONSTRAINT CHK_01 CHECK(COL1 IN ('사과','배','바나나') ),
    CONSTRAINT CHK_02 CHECK(COL2 > 0 AND COL2 <= 100)
);

E. NOT NULL

CREATE TABLE TB_TEST06(
    COL1 VARCHAR2(10) NOT NULL, -- NULL을 허용하지 않는다.
    COL2 VARCHAR2(20) --NULL을 허용
);
반응형
저작자표시 (새창열림)

'데이터베이스 > Oracle' 카테고리의 다른 글

[Oracle] 시퀀스(Sequence) 사용법  (0) 2021.06.01
[Oracle] JOIN 쉽게 이해하기  (0) 2021.05.29
[Oracle] ORDER BY, HAVING, ALIAS, GROUP FUNCTION 연습  (0) 2021.05.27
[Oracle] 비교연산자, ALL, ANY, IN, NOT IN, BETWEEN, LIKE 연습  (0) 2021.05.27
[Oracle] scott 계정 연습문제 (SELECT문, 비교 연산자, 논리 연산자)  (0) 2021.05.27
'데이터베이스/Oracle' 카테고리의 다른 글
  • [Oracle] 시퀀스(Sequence) 사용법
  • [Oracle] JOIN 쉽게 이해하기
  • [Oracle] ORDER BY, HAVING, ALIAS, GROUP FUNCTION 연습
  • [Oracle] 비교연산자, ALL, ANY, IN, NOT IN, BETWEEN, LIKE 연습
:j
:j
ddongjunn@gmail.com
  • :j
    dev.j
    :j
  • 전체
    오늘
    어제
    • :j
      • 프로그래밍 언어
        • Java
        • html
        • JavaScript
        • XML
        • JSON
        • CSS
        • jQuery
        • Web
        • k8s
        • JPA
      • 프레임워크
        • Spring
      • 코딩 테스트
        • Java
      • 네트워크
        • CCNA
      • 데이터베이스
        • Mssql
        • Oracle
      • 회고
      • :j story
      • CS
  • 블로그 메뉴

    • 홈
    • 태그
    • github
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    항해플러스백앤드
    group by
    HAVING
    MSSQL
    항해솔직후기
    id
    항해99
    항해플러스
    오버로딩
    appendChild
    Queue
    멤버변수
    class
    다형성
    <br>
    항해백앤드
    Name
    지역변수
    항해플러스백엔드
    오버라이딩
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
:j
[Oracle]무결성(Constraint) 제약 조건
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.