DDL(Data Definition Language)

CREATE TABLE 테이블 생성
ALTER TABLE 테이블 관련 변경
DROP TABLE 테이블 삭제
RENAME 이름 변경
TRUNCATE 테이블의 모든 데이터 삭제
COMMENT 테이블 설명 추가

1. DDL 종류

1.1. CREATE TABLE

CREATE TABLE book (
    book_id NUMBER(5),
    title	VARCHAR2(50),
    author	VARCHAR2(10),
    pub_date DATE
)
1.1.1. Subquery를 이용한 테이블 생성
CREATE TABLE account_emp
AS(
    SELECT *
    FROM emp
    WHERE deptno=10
);

1.2. ALTER TABLE

1.2.1. 컬럼 추가
ALTER TABLE book ADD (pubs VARCHAR2(50));
1.2.2. 컬럼 수정
ALTER TABLE book MODIFY (title VARCHAR2(100));
1.2.3. 컬럼 삭제
ALTER TABLE book DROP (author);
1.2.4. UNUSED 컬럼
  • UNUSED를 통해 일시적으로 컬럼을 사용하지 않음
  • 삭제해도 된다고 생각이 들면 DROP UNUSED COLUMNS로 삭제
  • UNUSED를 한번 지정하면 다시 바꿀 수 없기 때문에 백업을 해두어야 함
ALTER TABLE book SET UNUSED (author);
ALTER TABLE book DROP UNUSED COLUMNS;

1.3. DROP TALBE

  • 테이블 삭제
DROP TABLE book;

1.4. TRUNCATE TABLE

  • 테이블 안의 데이터 모두 삭제
TRUNCATE TABLE book;

1.5. COMMENT TABLE

COMMENT ON TABLE book IS 'this is comment';
SELECT * FROM user_tab_comments;

1.6. RENAME TABLE

RENAME book TO article;

2. Constraint (제약조건)

  • Database 테이블 레벨에서 특정한 규칙을 설정해둠

  • 예상치 못한 데이터의 손실이나 일관성을 어기는 데이터의 추가, 변경 등을 예방

  • Syntax

CREATE TABLE 테이블이름(
    컬럼이름 datatype [DEFAULT 기본값][컬럼제약조건],
    컬럼이름 datatype [DEFAULT 기본값][컬럼제약조건],
	...
    [테이블 제약조건]
);

2.1. 제약 조건 종류

  • NOT NULL

  • UNIQUE
  • PRIMARY KEY
  • FOREIGN KEY
  • CHECK
2.1.1. NOT NULL
  • NULL 값이 들어올 수 없음
  • 컬럼형태로만 제약조건 정의할 수 있음(테이블 제약조건 불가)
CREATE TABLEE book(
    book_id NUMBER(5) NOT NULL
);
2.1.2. UNIQUE
  • 중복된 값을 허용하지 않음 (NULL은 들어올 수 있음)
  • 복합 컬럼에 대해서도 정의 가능
  • 자동적으로 인덱스 생성
CREATE TABLEE book(
    book_id NUMBER(5) [CONSTRAINT 제약조건이름] UINQUE book_id
);
2.1.3. PRIMARY KEY
  • NOT NULL + UNIQUE (인덱스 자동 생성)
  • 테이블 당 하나만 나올 수 있음
  • 복합 컬럼에 대해서 정의 가능(순서 중요)
CREATE TABLE book (
	...
    PRIMARY KEY (book_id)
)
2.1.4. CHECK
  • 임의의 조건 검사. 조건식이 참이어야 변경 가능
  • 동일 테이블의 컬럼만 이용 가능
CREATE TABLE book(
    rate NUMBER CHECK (rate IN (1,2,3,4,5))
)
2.1.5. FOREIGN KEY
  • 참조 무결성 제약

  • 일반적으로 REFERENCE 테이블의 PK를 참조
  • REFERENCE 테이블에 없는 값은 삽입 불가
  • REFERENCE 테이블의 레코드 삭제 시 동작
    • ON DELETE CASCADE: 해당하는 FK를 가진 참조행도 삭제 (위험하기 때문에 잘 사용되지 않음)
    • ON DELETE SET NULL: 해당하는 FK를 NULL로 바꿈
CREATE TABLE book(
    ...
    author_id NUMBER(10),
    CONSTRAINT c_book_fk FOREIGN KEY (author_id)
    REFERENCE author(id)
    ON DELETE SET NULL
);

2.2. 제약조건 예제1

CREATE TABLE AUTHOR(
    AUTHOR_ID NUMBER(10) CONSTRAINT PK_AUTHOR PRIMARY KEY,
    AUTHOR_NAME VARCHAR2(100) CONSTRAINT NOT_NULL_AUTHOR NOT NULL,
    AUTHOR_DESC VARCHAR2(500)
);
ALTER TABLE BOOK ADD (AUTHOR_ID NUMBER(10));
ALTER TABLE EMP ADD PRIMARY KEY (EMPNO);
ALTER TABLE DEPT ADD PRIMARY KEY (DEPTNO);
ALTER TABLE EMP ADD FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO);

2.3. 제약조건 추가

  • NOT NULL은 추가 못함
ALTER TABLE BOOK ADD CONSTRAINT FK_BOOK_AUTHOR FOREIGN KEY(AUTHOR_ID)
REFERENCES AUTHOR(AUTHOR_ID)

2.4. 제약 조건 삭제

ALTER TABLE book DROP CONSTRAINT c_book_fk;
ALTER TABLE author DROP PRIMARY KEY CASCADE;

2.5. 제약 조건 타입

  • P : PRIMARY KEY
  • U : UNIQUE KEY
  • C : CHECK
  • R : FOREIGN KEY

2.6. 테이블 제약조건 확인

SELECT UC.CONSTRAINT_NAME, UC.TABLE_NAME, UCC.COLUMN_NAME,
	UC.CONSTRAINT_TYPE, UC.R_CONSTRAINT_NAME, UC.SEARCH_CONDITION
FROM USER_CONSTRAINTS UC JOIN USER_CONS_COLUMNS UCC
	ON UC.CONSTRAINT_NAME = UCC.CONSTRAINT_NAME
WHERE UC.TABLE_NAME = 'AUTHOR';