1. 데이터 유형
  2. CREATE TABLE
    1. 테이블과 컬럼 정의
    2. CREATE TABLE
    3. 제약조건(CONSTRAINT)
    4. 생성된 테이블 구조 확인
    5. SELECT 문장을 통한 테이블 생성 사례
  3. ALTER TABLE
    1. ADD COLUMN
    2. DROP COLUMN
    3. MODIFY COLUMN
    4. RENAME COLUMN
    5. DROP CONSTRAINT
    6. ADD CONSTRAINT
  4. RENAME TABLE
  5. DROP TABLE
  6. TRUNCATE TABLE

데이터 유형

  1. 테이블에 특정 자료를 입력할 때 그 공간을 자료의 유형별로 나누는 기준
  2. 유형과 지정한 크기(SIZE)에 맞지 않는 자료 입력시 에러 발생
  3. DBMS별로 데이터 유형은 차이가 많은 편이다.
    1. ANSI/ISO: NEMERIC, DECIMAL, DEC, SMALLINT, INTEGER, INT, BIGINT, FLOAT, REAL, DOUBLE PRECISION
    2. SQL Server/Sybase: 작은 정수형, 정수형, 큰 정수형, 실수형, MONEY, SMALLMONEY
    3. Oracle: NUMBER
  4. 테이블의 컬럼이 가지고 있는 대표적인 4가지 데이터 유형

    1. CHAR와 VARCHAR
      1. 저장 영역의 차이: VARCHAR는 길이가 다양한 컬럼과 정의된 길이와 실제 길이에 차이가 있는 컬럼에 적합
      2. 비교 방법의 차이: CHAR는 문자열 비교시 짧은 쪽의 공백을 추가하여 같은 길이로 만든다음 앞부터 비교
  5. VARCHAR, NUMERIC 유형에서 정의한 길이의 의미는 해당 데이터 유형이 가질 수 있는 최대한의 한계값을 정의

한 것이다.

CREATE TABLE

테이블과 컬럼 정의

  1. 기본키 지정: 테이블에 존재하는 모든 데이터를 고유하게 식별할 수 있으면서 반드시 값이 존재하는 컬럼(들)
    1. 예: 선수 테이블의 선수ID 컬럼
  2. 기본키와 외부키를 활용해서 테이블과 테이블간 관계 정의
  3. 예제

CREATE TABLE

  1. 규칙
    1. 테이블명은 객체를 의미하는 것으로 짓되 단수형을 권고한다.
    2. 테이블명은 유일해야 한다.
    3. 테이블 내의 컬럼명은 유일해야 한다.
    4. 각 컬럼은 콤마(,)로 구분되고 테이블 생성문의 마지막은 세미콜론(;)으로 끝난다.
    5. 컬럼명은 데이터 표준화 관점에서 데이터베이스 단위로 일관성 있게 명하는 것이 좋다.
    6. 컬럼 뒤에 데이터 유형은 꼭 지정되어야 한다.
    7. 테이블명과 컬럼명은 반드시 문자로 시작해야 하고 벤더별로 길이의 한계가 있다.
    8. 벤더에서 사전에 예약한 예약어는 사용할 수 없다.
    9. A-Z, a-z, 0-9, _, $, #만 허용된다.
    10. 대/소문자 구분은 하지 않는다.(기본적으로 대문자로 만들어진다.)
    11. 제약조건은 CONTRAINT 구문을 이용하여 추가한다.
  2. 예제

제약조건(CONSTRAINT)

  1. 데이터의 무결성을 유지하기 위한 보편적인 방법
  2. 테이블 생성시, 혹은 이후 ALTER TABLE을 통해 추가 가능
  3. 제약조건의 종류
  4. NULL: 공백이나 숫자와는 전혀 다른 값이며 '아직 정의되지 않은 미지의 값'이거나 '현재 데이터를 입력하지 못하는 경우'를 의미한다.
  5. DEFAULT: 데이터 입력시 컬럼의 값이 지정되어 있지 않을때 입력될 기본값(지정하지 않으면 NULL이 입력된다.)

생성된 테이블 구조 확인

  1. ORACLE의 경우

  2. SQL Server의 경우

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

  1. 구문
    1. Oracle: Create Table ~ As Select~(CTAS)
    2. SQL Server: Select~ Into~
  2. 특징
    1. 기존 테이블을 이용한 CTAS를 사용하면 컬럼별로 데이터 유형을 재정의 하지 않아도 된다.
    2. NOT NULL 제약조건만 새로운 복제 테이블에 적용되며 다른 제약조건은 없어진다.
    3. SQL Server는 컬럼 속성에 Identity를 사용했다면 그 속성까지 적용된다.

ALTER TABLE

ADD COLUMN

  1. 기존 테이블에 필요한 컬럼을 추가하는 명령
  2. 새롭게 추가된 컬럼은 테이블의 마지막 컬럼이 되며 위치를 지정할 수는 없다.
  3. 예제

DROP COLUMN

  1. 테이블에서 필요없는 컬럼을 삭제하는 명령
  2. 데이터가 있거나 없거나 모두 삭제 가능
  3. 한번에 하나의 컬럼만 삭제 가능하며 컬럼 삭제후 테이블에 최하 하나 이상의 컬럼이 존재해야 한다.
  4. 한번 삭제된 컬럼은 복구가 불가능하니 주의한다.
  5. 예제

MODIFY COLUMN

  1. 테이블에 존재하는 컬럼에 대해서 데이터 유형, 디폴트값, NOT NULL 제약조건에 대한 변경을 한다.
  2. 고려사항
    1. 컬럼의 크기를 늘릴 수는 있지만 줄일 수는 없다.
    2. 해당 컬럼이 NULL 값만 가지고 있거나 아무 행도 없으면 컬럼을 줄일 수 있다.
    3. 해당 컬럼이 NULL 값만 가지고 있으면 데이터 유형을 변경할 수 있다.
    4. 해당 컬럼의 DEFUALT 값을 바꾸면 변경 작업 이후 발생하는 행에만 적용된다.
    5. 해당 컬럼에 NULL 값이 없을 때에만 NOT NULL 제약조건을 추가할 수 있다.
  3. 예제
    1. TEAM 테이블의 ORIG_YYYY 칼럼의 데이터 유형을 CHAR(4)→VARCHAR2(8)으로 변경하고, 향후 입력
      되는 데이터의 DEFAULT 값으로 '20020129'을 적용하고, 모든 행의 ORIG 칼럼에 NULL이 없으
      므로 제약조건을 NULL -> NOT NULL로 변경한다.
    2. 구문

RENAME COLUMN

  1. 컬럼명을 변경하는 명령
  2. 컬럼명이 변경되면 해당 컬럼과 관련된 제약조건에 대해서도 자동으로 변경된다.(Oracle만)
  3. 예제
    1. Oracle
    2. SQL Server

DROP CONSTRAINT

  1. 테이블 생성시 부여했던 제약조건을 삭제하는 명령
  2. 예제

ADD CONSTRAINT

  1. 필요에 의해서 제약조건 추가하는 명령
  2. 예제: PLAYER 테이블에 TEAM 테이블과의 외래커 제약조건을 추가한다. 제약조건명은 PLAYER FK로 하고,
    PLAYER 태이블의 TEAM ID 칼럼이 TEAM 테이블의 TEAM_ID를 참조하는 조건이다.
    1. PLAYER 테이블이 참조하는 TEAM 테이블을 제거할시

    2. PLAYTER 테이블이 참조하는 TEAM 테이블의 데이터를 삭제할시

RENAME TABLE

  1. 테이블의 이름을 변경하는 명령
  2. 예제

DROP TABLE

  1. 테이블을 삭제하는 명령
  2. CASCADE CONSTRAINT: 해당 테이블에 정의된 제약조건도 삭제
    1. SQL Server에서는 CASCADE옵션이 없으므로 삭제하기 전에 먼저 제약조건을 삭제해야 한다.
  3. 예제

TRUNCATE TABLE

  1. 해당 테이블에 들어있는 모든 행들이 제거되고 저장 공간을 재사용 가능하도록 해제(테이블 자체는 삭제 안됨)
  2. 데이터의 조작에 해당하므로 DML로 분류할 수도 있지만 내부 처리 방식이나 Auto Commit 특성으로 인해 DDL로 분류
  3. DELETE보다 시스템 부하가 적다.
  4. 이 명령은 정상적인 복구가 불가능하므로 주의 필요
  5. 예제