Study/ORACLE

DDL ( Data Definition Language ) - CREATE

뱅코더 2021. 9. 30. 17:14

< 참고 >

Data Dictionary (데이터 사전 , 데이터 딕셔너리)

- 자원을 효율적으로 관리하기 위한 다양한 정보를 저장하는 시스템 테이블

 

- Data Dictionary는 사용자가 테이블을 생성하거나 사용자를 변경하는 등의

   작업을 할 때 DB 서버에 의해 자동으로 갱신되는 테이블.

 

- User_tables : 자신의 게정이 소유한 객체 등에 관한 정보를 조회 할 수 있는 Dictionary 뷰

 

DDL ( Data Definition Language ) 데이터 정의 언어

- 객체(Object)를 만들고(CREATE) , 수정(ALTER) , 삭제(DROP)하는 등의 

   데이터 전체 구조를 정의하는 언어로 주로 DB관리자 , 설계자가 많이 사용함.

 

 

CREATE

- TABLE , INDEX , VIEW 등 데이터베이스 객체를 생성하는 구문

 

* 테이블이란 ?

- 행(ROW)과 열(COLUMN)으로 구성된 가장 기본적인 데이터베이스 객체

- 데이터베이스 내에서 모든 데이터는 테이블을 통해서 저장된다.

< 테이블 생성 >

CREATE TABLE 테이블명 (
    컬럼명 자료형( SIZE ),
    컬럼명 자료형( SIZE ),
    컬럼명 자료형( SIZE ),
    ...
);


* SUBQUERY를 이용한 테이블 생성도 가능

CREATE TABLE 테이블명
AS SUBQUERY문


-- ex) MEMBER라는 이름의 TABLE 생성

CREATE TABLE MEMBER (
    MEMBER_ID   VARCHAR2(30),          -- 아이디
    MEMBER_PW   VARCHAR2(30),          -- 비밀번호
    MEMBER_NAME VARCHAR2(30),          -- 이름
    ENROLL_DATE DATE DEFAULT SYSDATE   -- 가입일 (기본값 : 현재시간)
);

* 주석 달기

COMMENT ON COLUMN 테이블명.컬럼명 IS '주석 내용';

-- MEMBER 테이블에 주석 추가
COMMENT ON COLUMN MEMBER.MEMBER_ID IS '아이디';
COMMENT ON COLUMN MEMBER.MEMBER_PW IS '비밀번호';
COMMENT ON COLUMN MEMBER.MEMBER_NAME IS '이름';
COMMENT ON COLUMN MEMBER.ENROLL_DATE IS '가입일';

* 제약 조건 (CONSTRAINTS)

- 사용자가 원하는 조건의 데이터만 유지하기 위해서 특정 컬럼에 설정하는 제약

- 데이터 무결성 보장을 목적으로 한다.

- 입력 데이터에 문제가 없는지 자동으로 검사하는 목적

- 데이터의 수정 / 삭제 가능 여부를 검사하는 목적

 

* 데이터 무결성 : 저장된 데이터의 정확성 / 일관성을 보증하는 것 => 중복 X , NULL X

 

1. NOT NULL

- 해당 컬럼에 반드시 값이 기록되어야 하는 경우 사용

- 삽입 / 수정 시 NULL 값을 허용하지 않도록 컬럼레벨에서 제한한다.

< NOT NULL >
-- NOT NULL은 컬럼레벨에서만 설정 가능하다

1) 조건명 미지정
CREATE TABLE MEMBER (
    MEMBER_ID   VARCHAR2(30) NOT NULL         
);

2) 조건명 지정 (ID_NN)
CREATE TABLE MEMBER (
    MEMBER_ID   VARCHAR2(30) CONSTRAINT ID_NN NOT NULL         
);

 

2. UNIQUE

- 같은 컬럼 내 입력 값에 대해서 중복을 제한하는 제약조건

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

- UNIQUE 조건을 설정해도 NULL값은 중복으로 삽입 가능하다.

- 복합키로 조건을 설정하면 묶은 컬럼이 모두 중복되는 값일 때만 오류 발생

< UNIQUE >

1) 컬럼레벨 조건명 미지정
CREATE TABLE MEMBER (
    MEMBER_ID   VARCHAR2(30) UNIQUE         
);

2) 컬럼레벨 조건명 지정 (ID_U)
CREATE TABLE MEMBER (
    MEMBER_ID   VARCHAR2(30) CONSTRAINT ID_U UNIQUE
);

3) 테이블레벨 조건명 미지정
CREATE TABLE MEMBER (
    MEMBER_ID   VARCHAR2(30),
    UNIQUE(MEMBER_ID)
);

4) 테이블레벨 조건명 지정 (ID_U)
CREATE TABLE MEMBER (
    MEMBER_ID   VARCHAR2(30),
    CONSTRAINT ID_U UNIQUE(MEMBER_ID)
);

5) 복합키 지정 (테이블 레벨에서만 가능함) (ID_PW_U)
CREATE TABLE MEMBER (
    MEMBER_ID   VARCHAR2(30),
    MEMBER_PW   VARCHAR2(30),
   [CONSTRAINT ID_PW_U] UNIQUE(MEMBER_ID , MEMBER_PW)
);

 

3. PRIMARY KEY (기본키)

- 테이블에 대한 식별자(IDENTIFIER) 역할을 하며 , 한 행의 정보를 찾기위해 사용할 컬럼을 의미한다.

- NOT NULL + UNIQUE 제약조건의 성질을 가지고 있다.

- 한 테이블에 한 개만 설정할 수 있다.

- 컬럼레벨, 테이블레벨 가능

- 복합키 가능

< PRIMARY KEY >

1) 컬럼레벨 조건명 미지정
CREATE TABLE MEMBER (
    MEMBER_ID   VARCHAR2(30) PRIMARY KEY
);

2) 컬럼레벨 조건명 지정 (ID_PK)
CREATE TABLE MEMBER (
    MEMBER_ID   VARCHAR2(30) CONSTRAINT ID_PK PRIMARY KEY
);

3) 테이블레벨 조건명 미지정
CREATE TABLE MEMBER (
    MEMBER_ID   VARCHAR2(30),
    PRIMARY KEY(MEMBER_ID)
);

4) 테이블레벨 조건명 지정
CREATE TABLE MEMBER (
    MEMBER_ID   VARCHAR2(30),
    CONSTRAINT ID_PK PRIMARY KEY(MEMBER_ID)
);

5) 복합키
CREATE TABLE MEMBER (
    MEMBER_ID   VARCHAR2(30),
    MEMBER_PW   VARCHAR2(30),
    [CONSTRAINT ID_PW_PK] PRIMARY KEY(MEMBER_ID , MEMBER_PW)
);

 

4. FOREIGN KEY (외부키)

- 참조(REFERENCES)된 다른 테이블의 컬럼이 제공하는 값만 사용할 수 있다.

- FK 조건에 의해 테이블간의 관계가 형성된다. ==> JOIN의 기준 컬럼

- 제공되는 값 외에 NULL 사용 가능

- 컬럼레벨, 테이블레벨 가능하나 작성법이 다르다

- PK컬럼과 UNIQUE 지정된 컬럼만 참조할 수 있음. 컬럼명이 생략되면 자동으로 PK 컬럼을 참조한다.

< FOREIGN KEY >

컬럼명 자료형(SIZE) [CONSTRAINT 조건명] REFERENCES 참조할 테이블 [(참조할 컬럼)] [삭제룰]

CONSTRAINT 조건명 FOREIGN KEY (컬럼명) REFERENCES 참조할 테이블 [(참조할 컬럼)] [삭제룰]


-- LOGIN 테이블의 LOG_NO 컬럼을 참조한다고 가정

1) 컬럼레벨 조건명 미지정
CREATE TABLE MEMBER (
    MEMBER_ID   VARCHAR2(30) REFERENCES LOGIN(LOG_NO)
);

2) 컬럼레벨 조건명 지정
CREATE TABLE MEMBER (
    MEMBER_ID   VARCHAR2(30) CONSTRAINT ID_FK REFERENCES LOGIN(LOG_NO)
);

3) 테이블레벨 조건명 미지정
CREATE TABLE MEMBER (
    MEMBER_ID   VARCHAR2(30),
    FOREIGN KEY (MEMBER_ID) REFERENCES LOGIN(LOG_NO)
);

4) 테이블레벨 조건명 지정
CREATE TABLE MEMBER (
    MEMBER_ID   VARCHAR2(30),
    CONSTRAINT ID_FK FOREIGN KEY (MEMBER_ID) REFERENCES LOGIN(LOG_NO)
);

* FOREIGN KEY 삭제 옵션

- 부모 테이블의 데이터 삭제 시 자식 테이블의 데이터 처리 방법을 설정할 수 있다.

 

1) ON DELETE RESTRICTED 

- DEFAULT값 

- FK 적용된 자식 데이터 삭제 불가

 

2) ON DELETE SET NULL

- FK 적용된 부모 데이터 삭제시 자식 데이터를 NULL로 변경하는 옵션

CREATE TABLE MEMBER (
    MEMBER_ID   VARCHAR2(30) REFERENCES LOGIN(LOG_NO) ON DELETE SET NULL
);

 

3) ON DELETE CASCADE

- FK 적용된 부모 데이터 삭제 시 자식 데이터도 함께 삭제

CREATE TABLE MEMBER (
    MEMBER_ID   VARCHAR2(30) REFERENCES LOGIN (LOG_NO) ON DELETE CASCADE
);

 

5. CHECK

- RDBMS의 데이터 무결성과는 관계없는 제약조건

- 컬럼에 기록되는 값에 조건을 설정

- 비교 값으로는 리터럴만 사용 가능하다.

< CHECK >

1) 컬럼레벨 조건명 미지정
CREATE TABLE MEMBER (
    MEMBER_ID   VARCHAR2(30) CHECK (MEMBER_ID > 0)
);

2) 컬럼레벨 조건명 지정
CREATE TABLE MEMBER (
    MEMBER_ID   VARCHAR2(30) CONSTRAINT ID_CH CHECK (MEMBER_ID > 0)
);

3) 테이블레벨 조건명 미지정
CREATE TABLE MEMBER (
    MEMBER_ID   VARCHAR2(30),
    CHECK (MEMBER_ID > 0)
);

4) 테이블레벨 조건명 지정
CREATE TABLE MEMBER (
    MEMBER_ID   VARCHAR2(30),
    CONSTRAINT ID_CH CHECK (MEMBER_ID > 0)
);

 


예제 ) 

 

 

 

 

 

 

 

 

'Study > ORACLE' 카테고리의 다른 글

DML ( Data Manipulation Language )  (0) 2021.09.30