Home 제1장 - 제2절: DDL
Post
Cancel

제1장 - 제2절: DDL

1. 데이터 유형

자주 쓰이는 데이터 유형

데이터 유형설명
CHARACTER(s)‐ 고정 길이 문자열 정보CHAR로 표현)
‐ s는 기본 길이 1바이트. 최대 길이 2000 or 8000바이트.
‐ s만큼 최대 길이 갖고, 고정 길이 갖고 있으므로
할당된 변수 값의 길이가 s보다 작을 경우엔
그 차이 길이만큼 공간으로 채워짐.
VARCHAR(s)‐ "CHARACTER VARYING"의 약자. 가변 길이 문자열 정보
Oracle: VARCHAR2, SQL Server: VARCHAR
‐ s는 최소 길이 1바이트, 최대 길이 4000 or 8000바이트.
‐ s만큼의 최대 길이 갖지만, 가변 길이 조정되므로
할당된 변수값의 바이트만 적용됨.
NUMERIC‐ 정수, 실수 등 숫자 정보(Oracle은 NUMBER)
‐ Oracle에선, 처음에 전체 자리 수 지정,
그리고 소수 부분 자리 수 지정.
DATE‐ 날짜와 시각 정보
‐ Oracle은 1초 단위


2. CREATE TABLE

  2.1. 테이블과 칼럼 정의

기본키 칼럼 정의
 - 테이블에 존재하는 모든 데이터를 고유하게 식별 가능하면서
반드시 값 존재하는 단일 칼럼이나 칼럼의 조합들(후보키) 중에 하나를 선정.

 - 기본키는 단일 칼럼이 아닌 여러 개 칼럼으로도 만들어질 수 있음.

 - 테이블과 테이블 간 정의된 관계는 기본키와 외부키 활용해서 설정

 - 변경 및 삭제 시에 수정/삭제 이상Anomaly 현상 발생 가능성
  => 테이블 별도 분리 저장(ID / 이름)
    ID를 외부키로 참조.

테이블칼럼 설명
부서
(DEPT)
부서에 대한 상세 정보
(부서ID, 부서명, 부서지역)
사원
(EMP)
사원에 대한 상세 정보
(사원ID, 사원명, 업무, 매니저,
 입사일자, 급여, 커미션, 부서ID)
부서-사원 관계의 칼럼 정보

  2.2. CREATE TABLE

테이블 생성 구문 형식

1
2
3
4
5
CREATE TABLE 테이블이름 (
    칼럼명1     DATATYPE    [DEFAULT 형식],
    칼럼명2     DATATYPE    [DEFAULT 형식],
    칼럼명3     DATATYPE    [DEFAULT 형식]
);

테이블 생성 시 주의할 규칙

  • 테이블명은 객체 의미에 적절한 이름 사용.
       가능한 단수형으로.

  • 테이블명은 다른 테이블 이름과 중복 X

  • 한 테이블 내에선 칼럼명 중복 지정 X
      (다른 테이블 간 동일 이름 칼럼은
       기본키-외래키 관계 경우 많음.)

  • 테이블 이름 지정하고,
       각 칼럼들은 괄호( )로 묶어 지정.

  • 각 칼럼들은 콤마,로 구분,
       테이블 생성문의 끝은 항상 세미콜론;으로 끝남.

  • 칼럼에 대해선 다른 테이블까지 고려하여
       DB 내에선 일관성 있게 사용하기.
       (데이터 표준화 관점)

  • 칼럼 뒤의 데이터 유형은 꼭 지정되어야 함.

  • 테이블명, 칼럼명은 반드시 문자로 시작,
       벤더별로 길이에 대한 한계 존재.

  • A-Z, a-z, 0-9, _, $, # 문자만 허용.


cf)  
  실제 DBMS에선 칼럼명을 PC나 UNIX의 디렉토리 구조처럼
'DB명+DB사용자명+테이블명+칼럼명'와 같은 계층적 구조로 관리


   2.2.1. 선수 테이블 PLAYER 생성

1
2
3
4
5
6
7
8
9
CREATE TABLE    PLAYER (
    PLAYER_ID       CHAR(7) NOT NULL,
    PLAYER_NAME     VARCHAR(20) NOT NULL,
    TEAM_ID         CHAR(3) NOT NULL,
    E_PLAYER_NAME   VARCHAR(40),
    JOIN_YYYY       CHAR(4),
    CONSTRAINT PLAYER_PK PRIMARY KEY (PLAYER_ID),
    CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID)
);


테이블 생성 관련 추가 주의사항

  • 테이블 생성시 대/소문자 구분은 X
       (테이블, 칼럼명은 대문자로 만들어짐)

  • DATETIME 데이터 유형엔 별도로 크기 지정 X

  • 문자 데이터 유형은 반드시
       가질 수 있는 최대 길이 표시해야 함.

  • 칼럼과 칼럼의 구분은 콤마,
       But, 마지막 칼럼은 X.

  • 칼럼에 대한 제약조건 있다면
       CONSTRAINT으로 추가 가능.

1
2
3
4
5
6
7
8
9
10
CREATE TABLE    TEAM (
    TEAM_ID         CHAR(7) NOT NULL,
    REGION_NAME     VARCHAR(8) NOT NULL,
    TEAM_NAME       VARCHAR(20) NOT NULL,
    E_TEAM_NAME     VARCHAR(50),
    ORIG_YYYY       CHAR(4),
    STADIUM_ID      CHAR(3) NOT NULL,
    CONSTRAINT TEAM_PK PRIMARY KEY (TEAM_ID),
    CONSTRAINT TEAM_FK FOREIGN KEY (STADIUM_ID) REFERENCES TEAM(TEAM_ID)
);

  2.3. 제약조건CREATE TABLE

: 데이터의 무결성 유지하기 위한 DB의 보편적 방법으로,
  테이블의 특정 칼럼에 설정하는 제약.
  (데이터 무결성 유지 <===> 사용자가 원하는 조건의 데이터만 유지)

   2.3.1. 제약조건의 종류

구분설명
PRIMARY KEY
(기본키)
‐ 테이블에 저장된 row 데이터를 고유하게 식별 위한 기본키 정의.
‐ 한 테이블에 하나의 기본키 제약만.
‐ 기본키 제약 정의 시, DBMS는 자동으로 고유키 인덱스 생성,
기본키 구성 칼럼에서는 ``NULL`` 입력불가.
==> '기본키 제약 = 고유키 제약 & NOT NULL 제약'
UNIQUE KEY
(고유키)
‐ 테이블 저장된 row 데이터를 고유하게 식별 위한 고유키 정의.
단, NULL은 고유키 제약 대상 아님.
==> NULL 값 가진 row가 여러 개 있어도 고유키 제약 위반은 X.
NOT NULL‐ NULL 값 입력 금지함.
‐ 디폴트 상태에선 모든 칼럼에 NULL 허가하고 있음.
But, 이 제약 지정으로 해당 칼럼은 입력 필수가 됨.
‐ NOT NULL을 CHECK의 일부분으로도 이해 가능.
CHECK‐ 입력 가능한 값의 범위 등을 제한.
‐ CHECK 제약으론 TRUE or FALSE으로 평가 가능한 논리식 지정함.
FOREIGN KEY
(외래키)
‐ RDB에서 테이블 간 관계 정의 위해
기본키를 다른 테이블의 외래키로 복사할 때 생김.
‐ 외래키 지정시 참조 무결성 계약 옵션 선택 가능.

   2.3.2. NULL의 의미

NULL은 공백(BLANK)이나 숫자 0과는 전혀 다른 값.
조건 맞는 데이터 없을 때의 공집합($ \varnothing $)과도 다름.
  ==> ‘아직 정의되지 않은 미지의 값’ OR ‘현재 데이터 입력하지 못하는 경우’를 의미

   2.3.3. DEFAULT의 의미

column 값이 지정되어 있지 않을 경우 기본값DEFAULT을 사전에 설정 가능.
  ==> 지정 안 한 경우: NULL 값
       정의한 경우: 정의된 기본 값으로 입력됨.

   2.3.4. 팀 테이블 TEAM 생성

1
2
3
4
5
6
7
8
9
10
CREATE TABLE    TEAM (
    TEAM_ID         CHAR(7) NOT NULL,
    REGION_NAME     VARCHAR(8) NOT NULL,
    TEAM_NAME       VARCHAR(20) NOT NULL,
    E_TEAM_NAME     VARCHAR(50),
    ORIG_YYYY       CHAR(4),
    STADIUM_ID      CHAR(3) NOT NULL,
    CONSTRAINT TEAM_PK PRIMARY KEY (TEAM_ID),
    CONSTRAINT TEAM_FK FOREIGN KEY (STADIUM_ID) REFERENCES TEAM(TEAM_ID)
);

  2.4. 생성된 테이블 구조 확인

1
DESCRIBE PLAYER;


결과

FieldTypeNullKeyDefaultExtra
PLAYER_IDchar(7)NOPRInull 
PLAYER_NAMEvarchar(20)NO null 
TEAM_IDchar(3)NOMULnull 
E_PLAYER_NAMEvarchar(40)YES null 
JOIN_YYYYchar(4)YES null 

2.5. SELECT 문장 통한 테이블 생성 사례

1
2
CREATE TABLE TEAM_TEMP
AS SELECT * FROM TEAM;
1
DESC TEAM_TEMP;


결과

FieldTypeNullKeyDefaultExtra
TEAM_IDchar(7)NO null 
REGION_NAMEvarchar(8)NO null 
TEAM_NAMEvarchar(20)NO null 
E_TEAM_NAMEvarchar(50)YES null 
ORIG_YYYYchar(4)YES null 
STADIUM_IDchar(3)NO null 


3. ALTER TABLE

  3.1. ADD COLUMN

기존 테이블에 필요한 column 추가하기

1
2
ALTER   TABLE               테이블명
ADD     추가할 칼럼명       데이터 유형;
1
2
ALTER TABLE PLAYER
ADD ADDRESS VARCHAR(80);
1
DESC PLAYER;


결과

FieldTypeNullKeyDefaultExtra
PLAYER_IDchar(7)NOPRInull 
PLAYER_NAMEvarchar(20)NO null 
TEAM_IDchar(3)NOMULnull 
E_PLAYER_NAMEvarchar(40)YES null 
JOIN_YYYYchar(4)YES null 
ADDRESSvarchar(80)YES null 

  3.2. DROP COLUMN

 - 테이블에서 필요 없는 column 삭제.
(데이터가 있든 없든 모두 삭제 가능.)  - 한 번에 하나의 칼럼만 삭제 가능
    &
    삭제 후 최소 하나 이상의 칼럼이 테이블에 존재해야 함.

1
2
ALTER   TABLE   테이블명
DROP    COLUMN  삭제할 칼럼명;


결과

FieldTypeNullKeyDefaultExtra
PLAYER_IDchar(7)NOPRInull 
PLAYER_NAMEvarchar(20)NO null 
TEAM_IDchar(3)NOMULnull 
E_PLAYER_NAMEvarchar(40)YES null 
JOIN_YYYYchar(4)YES null 

  3.3. MODIFY COLUMN

1
2
3
ALTER   TABLE   테이블명
modify (칼럼명1 데이터 유형 [DEFAULT 식] [NOT NULL],
        칼럼명2 데이터 유형 ...);
1
2
ALTER   TABLE   TEAM_TEMP
MODIFY  ORIG_YYYY VARCHAR(8) DEFAULT '20020129' NOT NULL;
1
2
3
SELECT *
    FROM COLS
    WHERE TABLE_NAME = 'TEAM_TEMP';


결과

FieldTypeNullKeyDefaultExtra
TEAM_IDchar(7)NO null 
REGION_NAMEvarchar(8)NO null 
TEAM_NAMEvarchar(20)NO null 
E_TEAM_NAMEvarchar(50)YES null 
ORIG_YYYYvarchar(8)NO 20020129 
STADIUM_IDchar(3)NO null 

칼럼 변경 시 아래 사항 고려

  • 해당 칼럼의 크기를 늘릴 수는 있지만 줄이지는 못함.
    기존 데이터가 훼손될 수 있기 때문.
  • 해당 칼럼이 NULL 값만을 가지고 있거나
    테이블에 아무 행도 없으면 칼럼의 폭을 줄일 수 있음.
  • 해당 칼럼이 NULL 값만 가지고 있으면
    데이터 유형 변경 가능.
  • 해당 칼럼의 DEFAULT 값 바꾸면
    변경 작업 이후 발생하는 행 삽입에만 영향 미침.
  • 해당 칼럼에 NULL 값 없을 경우에만
    NOT NULL 제약조건 추가 가능.

  3.4. RENAME COLUMN

1
2
ALTER   TABLE   테이블명
RENAME  COLUMN  변경해야 할 칼럼명 TO 새로운 칼럼명;

  3.5. DROP CONSTRAINT

1
2
ALTER   TABLE       테이블명
DROP    CONSTRAINT  제약조건명;
1
DROP TABLE PLAYER;

  3.6. TRUNCATE TABLE

  테이블 자체는 삭제 X
해당 테이블에 들어있던 모든 행들 제거되고
저장 공간 재사용 가능하도록 해체함.

1
TRUNCATE TABLE;
1
TRUNCATE TABLE TEAM;


4. RENAME TABLE

1
RENAME  변경전 테이블명 TO  변경후 테이블명;


5. DROP TABLE

1
DROP    TABLE   테이블명    [CASCADE CONSTRAINT];

※ CASCADE CONSTRAINT란?
: 해당 테이블과 관계 있었던 참조되는 제약조건에 대해서도 삭제한다는 것 의미.



6. TRUNCATE TABLE

1
TRUNCATE    TABLE   테이블명;

TRUNCATE TABLE은 테이블 자체 삭제 X,
해당 테이블에 들어있던 모든 row들이 제거되고 저장 공간 재사용 가능토록 해제함.

Contents