CS/DB

스키마와 테이블 정의

행복한 개복치 2023. 5. 15. 17:20

SQL 데이터 타입

숫자형

  • 정수형 : INTEGER, SMALLINT, …
  • 실수형 : DECIMAL, FLOAT, REAL, DOUBLE

문자형

  • 고정길이 문자열 : CHAR(n)
    • 항상 n개 문자를 저장
  • 가변길이 문자열 : VARCHAR(n)
    • 최대 n개 문자까지 저장

날짜형

  • DATE
  • TIME
  • TIMESTAMP : DATE & TIME
  • INTERVAL

MySQL의 데이터 타입

  • 숫자형(Numeric)
    • 컬럼의 디폴트 부호 특성은 SIGNED
  • 문자형(Character)
  • 이진 문자형(Binary String)
  • 날짜형(Temporal)

데이터 정의문(DDL)

SQL 명령문의 종류

  • 데이터 정의문(DDL)
  • 데이터 조작문(DML)
  • 데이터 제어문(DCL)
  • 트랜젝션 제어문(TCL)

💡 SQL 표준에서의 용어

  • 릴레이션 → 테이블
  • 속성 → 열, 컬럼
  • 튜플 → 행

💡 SQL 형식 정의 기호
[…] : 생략 가능(0~1회)
{…}+ : 1회 이상 반복
{…}* : 0회 이상 반복

스키마 관련

CREATE SCHEMA

: 생성하려는 스키마의 명칭을 정의

CREATE {SCHEMA | DATABASE} 스키마명;

DROP SCHEMA

: 생성한 스키마를 제거

DROP {SCHEMA | DATABASE} 스키마명;

테이블 관련

CREATE TABLE

: 테이블의 구조와 컬럼의 제약조건을 명세

컬럼 제약조건

  • NOT NULL : NULL 값을 허용하지 않음
  • UNIQUE [KEY] : 고유한 값을 갖거나, 혹은 NULL 값을 허용함
    • 내부적으로 저장장치에 인덱스를 생성하라는 명령임
  • PRIMARY KEY : UNIQUE ^ NOT NULL 제약조건 (개체 무결성 유지)
  • FOREIGN KEY : 부모 테이블의 PK 값 v NULL 값을 가짐 (참조 무결성 유지)
  • CHECK : 입력/수정 가능한 값의 범위를 제한하는 논리식을 서술

CREATE TABLE 문의 일반 형식

컬럼 제약조건의 서술 위치에 따라 두가지 형식이 제공됨

  1. 컬럼 레벨 정의 방식
    : 컬럼의 제약조건을 컬럼을 선언할 때 서술
  2. 테이블 레벨 정의 방식
    : 컬럼의 제약조건을 모든 컬럼을 정의한 이후 아래에서 한꺼번에 서술

DROP TABLE

: 테이블 정의와 테이블 데이터를 모두 삭제함

DROP TABLE 테이블명 [RESTRICT | CASCADE]
  • RESTRICT : 삭제할 튜플을 참조하는 튜플이 자식 테이블에 하나라도 존재하면, DBMS가 이 명령의 실행을 거부
  • CASCADE : 삭제할 튜플을 참조하는 튜플이 자식 테이블에 하나라도 존재하면, 자식 테이블의 참조하는 튜플들도 DBMS가 함께 삭제

💡 MySQL에서 RESTRICT | CASCADE 옵션은 기능이 없음

  • 다른 DBMS로의 포팅을 위해서만 사용

  • 자식 테이블이 한 개라도 있으면 (빈 테이블이라도) 삭제가 거부됨

ALTER TABLE

  • 컬럼의 추가/삭제/수정
  • 제약조건의 추가/삭제
    • 제약조건을 수정하려면 삭제 후, 수정된 제약조건을 추가하는 간접적인 방법으로 진행

추가 : ADD

삭제 : DROP

수정 : MODIFY

TRUNCATE TABLE

: 테이블 정의는 그대로 두고 테이블 데이터를 모두 삭제함

내부적으로는 DROP TABLE 문 실행 후, CREATE TABLE 문을 통해 테이블을 다시 생성함

TRUNCATE TABLE 테이블명;

💡 MySQL의 경우, 자식 테이블이 있으면 실행이 거부됨

DDL의 삭제와 DML의 삭제 차이

DDL (DROP / TRUNCATE) DML (DELETE)
트랜젝션 로그에 실행 기록 남기지 않음 → 시스템 부하 적음 남김 → 시스템 부하를 줌
AUTO COMMIT O X
Rollback을 통한 데이터 복구 불가능 가능