05.DDL(Data Definition Language)
by SANGGI JEON
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';
Subscribe via RSS