- 데이터 딕셔너리
- CREATE
- 제약 조건
- PRIMARY KEY
- FOREIGN KEY
- NOT NULL
- UNIQUE
- CHECK
DDL 이란 데이터 정의 언어로 객체를 CREATE 또는 ALTER 또는 DROP 한다.
데이터의 전체 구조를 정의하는 언어로 주로 DB 관리자나 설계자가 사용한다.
사용자가 테이블을 생성하거나 사용자를 변경하는 등의 작업을 할 때 데이터베이스 서버에 의해 자동으로 갱신되는 테이블
테이블이나 인덱스 및 뷰 등 다양한 데이터베이스 객체를 생성하는 구문이다.
테이블로 생성된 객체는 DROP 구문을 통해 제거 할 수 있다.
-- 1) 테이블 생성하기
CREATE TABLE MEMBER (
MEMBER_ID VARCHAR2(20),
MEMBER_PWD VARCHAR2(20),
MEMBER_NAME VARCHAR2(15), -- 한글 2글자에서 5글자 (3BYTE)
MEMBER_SSN CHAR(14), -- 항상 14글자
ENROLL_DATE DATE DEFAULT SYSDATE
);
-- 2) 컬럼에 주석달기
COMMENT ON COLUMN MEMBER.MEMBER_ID IS '회원 아이디';
테이블 생성 시 주의사항은 주민등록번호나 전화번호와 같은 숫자로만 이루어진 데이터를 NUMBER 타입으로 지정할 경우 값 제일 앞 0 을 유지하지 못한다. 따라서 CHAR 또는 VARCHAR2 타입으로 컬럼 타입을 지정한다.
데이터베이스는 char 개념이 없고 string 개념만 있다.
또한 한글과 한자는 3 byte 이며 영어나 숫자나 특수문자는 1 byte 이다.
사용자가 원하는 조건의 데이터만 유지하기 위해서 특정 컬럼에 설정하는 제약이며 데이터 무결성 보장을 목적으로 한다. 즉 중복과 NULL 값이 아니어야한다.
✍️ 제약 조건은 반드시 알아둬야 한다.
중요도 : PRIMARY KEY - FOREIGN KEY - NOT NULL - UNIQUE - CHECK
테이블에서 한 행의 정보를 찾기위해 사용할 컬럼을 의미하며 테이블에 대한 식별자 역할을 한다. NOT NULL 및 UNIQUE 의미를 가지며 한 테이블당 한 개만 설정할 수 있다.
USER_NO NUMBER PRIMARY KEY -- 컬럼 레벨 제약조건 (이름 미지정)
USER_NO NUMBER CONSTRAINT USER_NO_PK PRIMARY KEY -- 컬럼 레벨 제약조건 (이름 지정)
, PRIMARY KEY(USER_NO); -- 테이블 레벨 제약조건 (이름 미지정)
, CONSTRAINT USER_NO_PK PRIMARY KEY(USER_NO) -- 테이블 레벨 제약조건 (이름 지정)
참조된 다른 테이블의 컬럼이 제공하는 값만 사용할 수 있다. 제공되는 값 외에는 NULL 을 사용할 수 있다.
-- 컬럼 레벨 제약조건
GRADE_CODE NUMBER CONSTRAINT GRADE_CODE_FK1 REFERENCES USER_GRADE(GRADE_CODE)
-- 테이블 레벨 제약조건
, CONSTRAINT GRADE_CODE_FK2 FOREIGN KEY(GRADE_CODE) REFERENCES USER_GRADE2(GRADE_CODE)
외래키는 FOREIGN KEY 삭제 옵션이 존재하는데 부모 테이블의 데이터 삭제 시 자식 테이블의 데이터를 어떻게 설정할 것인지 지정할 수 있다. 반드시 외워두도록 한다.
해당 컬럼에 반드시 값이 기록되어야 하는 경우 사용한다.
USER_NO NUMBER NOT NULL; -- 컬럼 레벨 제약조건
NOT NULL 은 컬럼 레벨로만 작성이 가능하다.
컬럼에 입력 값에 대해서 중복을 제한하는 제약조건이다. 단 NULL 은 중복이 가능하다.
USER_ID VARCHAR2(20) UNIQUE -- 컬럼 레벨 제약조건 (이름 미지정)
USER_ID VARCHAR2(20) CONSTRAINT USER_ID_UK UNIQUE -- 컬럼 레벨 제약조건 (이름 지정)
, CONSTRAINT USER_ID_UK UNIQUE(USER_ID) -- 테이블 레벨 제약조건
컬럼에 기록되는 값에 조건 설정을 할 수 있다.
비교값은 리터럴만 사용할 수 있으며 변하는 값이나 함수는 사용하지 못한다.
-- 컬럼 레벨 제약조건
GENDER VARCHAR2(10) CONSTRAINT GENDER_CHECK CHECK (GENDER IN ('남', '여'))