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 NULLNULL 값 입력 금지함.
‐ 디폴트 상태에선 모든 칼럼에 NULL 허가하고 있음.
But, 이 제약 지정으로 해당 칼럼은 입력 필수가 됨.
NOT NULLCHECK의 일부분으로도 이해 가능.
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