본문 바로가기
국비과정/Oracle

국비 33일차 - [DDL] CREATE, DROP, 제약조건(NOT NULL, UNIQUE, CHECK, PRIMARY KEY FOREIGN KEY)

by Jeong.dev 2022. 5. 12.

DDL

- 데이터 정의어

- 오라클에서 제공하는 객체 생성, 변경, 삭제 등 데이터의 구조 정의어(데이터가 아닌 객체 정의)

 

1. CREATE
- 데이터베이스 객체(테이블, 뷰, 사용자 등) 생성 구문

CREATE TABLE 테이블명 (
	컬럼명 자료형(크기) [DEFAULT 기본값] [제약조건],
	컬럼명 자료형(크기) [DEFAULT 기본값] [제약조건],
	컬럼명 자료형(크기) [DEFAULT 기본값] [제약조건],
	...
);

2. DROP

- 데이터베이스 객체 삭제 구문

DROP TABLE MEMBER;



 기타

1. 데이터 딕셔너리 :  데이터베이스에 의해 자동으로 갱신되는 객체 정보 저장 시스템 테이블

- USER_TABLES : 사용자가 가지고 있는 테이블의 구조를 확인하는 뷰 테이블
- USER_TAB_COLUMNS : 테이블, 뷰의 컬럼과 관련된 정보를 조회하는 뷰 테이블

SELECT * FROM USER_TABLES;

SELECT * FROM USER_TAB_COLUMNS 
WHERE TABLE_NAME = 'MEMBER';

SELECT UC.CONSTRAINT_NAME, 
       UC.TABLE_NAME, 
       UCC.COLUMN_NAME, 
       UC.CONSTRAINT_TYPE
FROM USER_CONSTRAINTS UC
JOIN USER_CONS_COLUMNS UCC ON (UC.CONSTRAINT_NAME = UCC.CONSTRAINT_NAME)
WHERE UC.TABLE_NAME = 'MEMBER';

 

2. 컬럼 주석 : 데이터 컬럼에 대한 설명 작성할 수 있는 구문

3. 샘플 데이터 추가 : 만들어진 테이블에 샘플 데이터 추가

4. COMMIT : 추가한 데이터를 실제 데이터베이스에 반영(반영 전에는 메모리 버퍼에 임시저장 됨)

-- 컬럼 주석
-- COMMENT ON COLUMN 테이블.컬럼명 IS '주석 내용';
COMMENT ON COLUMN MEMBER.ID IS '회원 아이디';

-- 샘플 데이터 추가
-- INSERT INTO 테이블명[(컬럼명, ..., 컬럼명)] VALUES (값, ..., 값)
INSERT INTO MEMBER VALUES('USER1', '1234', '김땡땡', '2022-05-12');
INSERT INTO MEMBER(ID, PASSWORD) VALUES('USER3', '1234');

-- 테이블의 구조를 표시해 주는 구문
DESC MEMBER;

COMMIT;
ROLLBACK;

 

 

 제약조건

1. NOT NULL 제약조건

- 컬럼에 NULL 값을 허용하지 않음

- 컬럼 레벨에서만 설정 가능

 

 

2. UNIQUE 제약조건

- 컬럼 입력 값이 중복된 값을 가질 수 없음

- 컬럼 레벨, 테이블 레벨 모두 설정 가능

- 여러 컬럼 묶어서 하나의 UNIQUE 제약조건으로 설정 가능

(테이블 레벨로만 설정 가능,

제약조건이 설정되어 있는 컬럼 값이 모두 중복되는 경우에만 오류 발생)

 

 

3. CHECK 제약조건

- 컬럼에 기록되는 값의 조건 설정(비교 값은 리터럴만 가능, 변하는 값 또는 함수 불가)

- 컬럼 레벨, 테이블 레벨 모두 설정 가능

CHECK (비교연산자)
	CHECK(컬럼 [NOT] IN(값, 값, ...))
	CHECK(컬럼 BETWEEN 값 AND 값)
	CHECK(컬럼 LIKE '_문자')
	...

 

 

4. PRIMARY KEY(기본 키) 제약조건

- 한 행의 정보 식별을 위한 제약조건

- 기본 키 설정 시 자동으로 NOT NULL, UNIQUE 제약조건 설정됨

- 한 테이블 당 한 개만 설정 가능 (한 개 이상의 컬럼 묶어서 기본 키 설정 가능 -> 복합키)

- 컬럼 레벨, 테이블 레벨 모두 설정 가능

 

 

5. FOREIGN KEY(외래 키) 제약조건

- 다른 테이블에 존재하는 값만 가져야 하는 제약조건 ( NULL 값 가능)

- 외래 키로 참조한 컬럼의 값만 기록 가능

- 컬럼 레벨, 테이블 레벨 모두 설정 가능

1) 컬럼 레벨
컬럼명 자료형(크기) [CONSTRAINT 제약조건명] REFERENCES 참조할테이블명[(기본 키)] [삭제룰]
            
2) 테이블 레벨
[CONSTRAINT 제약조건명] FOREIGN KEY(컬럼명) REFERENCES 참조할테이블명[(기본 키)] [삭제룰]
CREATE TABLE MEMBER (
    NO NUMBER,
    ID VARCHAR2(20) NOT NULL, -- NOT NULL 제약조건
    PASSWORD VARCHAR2(20) NOT NULL,
    NAME VARCHAR2(15)NOT NULL,
    GENDER CHAR(3),
    AGE NUMBER,
    GRADE_ID NUMBER CONSTRAINT MEMBER_GRADE_ID_FK
    	REFERENCES MEMBER_GRADE (GRADE_CODE), --FOREIGN KEY 제약조건
    ENROLL_DATE DATE DEFAULT SYSDATE,
    CONSTRAINT MEMBER_NO_PK PRIMARY KEY(NO), -- PRIMARY KEY 제약조건
    CONSTRAINT MEMBER_ID_UQ UNIQUE(ID), -- UNIQUE 제약조건
    CONSTRAINT MEMBER_GENDER_CK CHECK(GENDER IN ('남', '여')), -- CHECK 제약조건
--  CONSTRAINT MEMBER_GRADE_ID_FK FOREIGN KEY(GRADE_ID) 
--      REFERENCES MEMBER_GRADE /*(GRADE_CODE)*/, -- 생략가능
    CONSTRAINT MEMBER_AGE_CK CHECK(AGE > 0)

 

 

 

 

댓글