6 분 소요

2023. 01. 26. 수업내용 정리

스키마.. 데이터 및 열..


스키마

  • 스키마(Schema)는 테이블(Table)을 담기위한 존재이다.
  • 스키마는 데이터(레코드)를 직접적으로 가지지 못한다.
  • 스키마의 다른 이름은 데이터베이스(Database)이다.
  • 명명법 : 단수형 스네이크 케이스


만들기

  • 새로운 스키마를 만들기 위해 아래와 같이 명령한다.
    CREATE SCHEMA `만들 스키마 이름`;
    

    동일한 이름을 가진 스키마를 또 만들려고 할 경우 1007 오류가 발생하니 유의한다. 만약, 없으면 만들고, 있다하더라도 오류가 발생하지 않기를 원한다면 아래와 같이 명령한다.

    CREATE SCHEMA `스키마 이름` IF NOT EXISTS `스키마 이름`;
    


조회하기

  • 존재하는 스키마의 목록을 확인하기 위해 아래와 같이 명령한다.
  • SHOW SCHEMAS;


수정하기

  • 스키마의 이름을 바꾸는 것은 불가능하다.
  • 스키마의 인코딩 문자셋(Character Set) 및 암호화 여부, 읽기 전용 여부 등을 수정할 수 있지만 생략.


삭제하기

  • 존재하는 스키마를 삭제하기 위해 아래와 같이 명령한다.
    DROP SCHEMA `스키마 이름`;
    

    존재하지 않는 스키마를 삭제하려할 경우 오류가 발생하는데, 이 떄 존재하지 않더라도 오류가 발생하지 않게 하고 싶다면 아래와 같이 명령한다.

    DROP SCHEMA IF EXISTS `스키마 이름`;
    





테이블 및 열


테이블

  • 테이블(Table)은 실제 레코드(Record)를 담기 위해 사용된다.
  • 테이블은 반드시 스키마에 종속되어있어야 한다.
  • 명명법 : 복수형 스네이크 케이스

    만들기

    • 테이블을 만들기 위해 아래와 같이 명령할 수 있다.
      CREATE TABLE `소속 스키마 이름`.`테이블 이름` (
        [열 구조,...],
        [제약 조건 구조,...]
      );
      

      이미 존재하는 테이블일 경우 오류를 발생시키지 않게하기 위해 아래와 같이 명령한다.

      CREATE TABLE IF NOT EXISTS `소속 스키마 이름`.`테이블 이름` (
        [열 구조,...]
      );
      

    테이블 목록 조회하기

    • 어떠한 스키마에 종속된 테이블의 목록을 조회하기 위해 아래와 같이 명령할 수 있다.
      SHOW TABLES IN `스키마 이름`;
      

    테이블 구조 조회하기

    • 어떠한 테이블의 구조(열 구조)를 조회하기 위해 아래와 같이 명령할 수 있다.
      DESC `스키마 이름`.`테이블 이름`;
      


    테이블 수정하기

    • 테이블 수정과 관련된 쿼리는 콤마를 이용하여 여러 명령을 담을 수 있다. 가령, a열을 추가하고 b열을 삭제하는 쿼리를 아래와 같이 작성할 수 있다.
      ALTER TABLE `some-schema`.`some_table`
        ADD COLUMN `a` INT,
        DROP COLUMN `b`;
      


    테이블 소속 스키마 및 이름 변경하기

    • 스키마와 달리 테이블의 이름을 변경할 수 있다.
    • 혹은 테이블이 소속된 스키마를 변경할 수 있다.
      ALTER TABLE `소속 스키마`.`대상 테이블` RENAME `새로운 소속 스키마`.`새로운 테이블 이름`;
      


    열 추가하기

    • 이미 존재하는 테이블에 열을 추가하기 위해 아래와 같이 명령한다.
      ALTER TABLE `소속 스키마`.`테이블` ADD COLUMN [열 구조];
      

      먄약 추가하는 열의 위치를 지정하고자 한다면 아래와 같이 명령한다.

      ALTER TABLE `소속 스키마`.`테이블` ADD COLUMN [열 구조] AFTER `기준 열`;
      

      위 명령에서 새로운 열은 기준 열 뒤에 만들어진다. 먄약, 열을 가장 앞에 만들고 싶다면 아래와 같이 FIRST 키워드를 사용한다.

      ALTER TABLE `소속 스키마`.`테이블` ADD COLUMN [열 구조] FIRST;
      

      BEFORE 키워드가 없음에 유의한다.


    열 삭제하기

    • 이미 존재하는 테이블에서 열을 삭제하기 위해 아래와 같이 명령한다.
      ALTER TABLE `소속 스키마`.`테이블` DROP COLUMN `열 이름`;
      


    열 타입 수정하기

    • 이미 존재하는 테이블의 열 타입을 변경하기 위해 아래와 같이 명령한다.
      ALTER TABLE `소속 스키마`.`테이블` MODIFY COLUMN `대상 열` [이름을 제외한 열 구조];
      

      열의 순서를 변경하기 위해 아래의 명령어를 이용할 수도 있다.

      ALTER TABLE `소속 스키마`.`테이블` MODIFY COLUMN `대상 열` [이름을 제외한 열 구조] AFTER `기준 열`;
      
      ALGER TABLE `소속 스키마`.`테이블` MODIFY COLUMN `대상 열` [이름을 제외한 열 구조] FIRST;
      


    열 이름 및 타입 수정하기

    • 이미 존재하는 테이블의 열 이름 및 타입을 변경하기 위해 아래와 같이 명령한다.
      ALTER TABLE `소속 스키마`.`테이블` CHANGE COLUMN `대상 열` `새로운 이름` [이름을 제외한 열 구조];
      


    열 이름 수정하기

    • 이미 존재하는 테이블의 열 이름을 변경하기 위해 아래와 같이 명령한다.
      ALTER TABLE `소속 스키마`.`테이블` RENAME COLUMN `대상 열` TO `새로운 이름`;
      


    테이블 삭제하기

    • 이미 존재하는 테이블을 삭제하기 위해 아래와 같이 명령한다.
      DROP TABLE `소속 스키마 이름`.`테이블 이름`;
      

      마찬가지로 테이블이 없을 경우 오류를 발생시키지 않게하기 위해 아래와 같이 추가할 수 있다.

      DROP TABLE IF EXISTS `소속 스키마 이름`.`테이블 이름`;
      


  • 테이블에 삽입(Insert)될 레코드가 가지는 각 데이터의 타입 및 개수(구조)를 제한하기 위해 사용한다.
  • 모든 테이블은 반드시 한 개이사으이 열(Column)을 가지고 있어야 한다.
  • 명명법 : 단수형 스네이크 케이스
  • 열은 아래 구조로 명시할 수 있다.
    `열 이름` [데이터 타입] [NULL|NOT NULL]? [DEFAULT [기본 값]]? [AUTO_INCREMENT]?
    
    • NULL : 해당 열의 값이 NULL일 수 있다는 의미(기본 값)
    • NOT NULL : 해당 열의 값이 NULL일 수 없다는 의미
    • DEFAULT : 해당 열에 대해 값이 명시되지 않았을 때 NULL 대신 사용할 기본 값을 명시. 별도로 명시하지 않으면 DEFAULT NULL이 생략된 것이라고 본다.
    • AUTO_INCREMENT : 해당 열이 숫자형이고 기본 키(Primary Key)일 떄 삽입(Insert)시 값이 누락된 경우 1(혹은 테이블이 기억하고 있는 최종 인덱스 값 + 1) 부터 시작하여 자동 증감시키는 일종의 순번(완전한 순번은 아님)열로 이용하겠다는 의미이다.


데이터 타입

  • 어떠한 열이 가질 수 있는 데이터의 타입을 의미한다.
  • 데이터형, 자료형, 자료 타입 등의 이름을 가진다.

    정수형

    • TINYINT(n) : -128부터 127까지의 정수를 가질 수 있다. n은 자리수 제한이고 생략시 3이 이용된다.
    • SMALLINT(n) : -32,768부터 32,767 까지의 정수를 가질 수 있다. 이 때 n은 자리수 제한이고 생략시 5가 사용된다.
    • MEDIUMINT(n) : -8,388,608 부터 8,388,607 까지의 정수를 가질 수 있다.
    • INT(n) : -2,147,484,648 부터 2,147,484,647 까지의 정수를 가질 수 있다.
    • BIGINT(n) : -9,223,372,036,854,775,808 부터 9,223,372,036,854,775,807 까지의 정수를 가질 수 있다.
    • 위 정수형에서 n은 길이 제한이고, 이를 생략할 경우 가질 수 있는 최대 길이를 사용한다.
    • 위 정수형 뒤에 UNSINGED를 붙이면 (가령 TINYINT UNSIGNED)부호를 사용하지 않는 대신 음수(0 미만)에 해당되는 값 크기만큼 양수에서 추가로 이용할 수 있게 된다. 가령 TINYINT UNSIGNED의 범위는 0부터 255까지이다.

    실수형

    • FLOAT(t, p) : 부동소수인 실수 -3.402823466E+38 부터 -3.402823466E+38 데이터를 담는다. 자바와 동일하게 메모리에서 데이터를 담는 방식 때문에 소수점 끝자리 일부가 손실될 수 있음으로 정밀한 데이터를 담아야하는 경우 사용하지 않는다. t는 전체 길이를, p는 소수점 길이를 제한하기 위해 사용한다. tp를 생략할 경우 부동소수로, 명시할 경우 고정소수 처럼 이용할 수 있다.
    • DOUBLE(t, p) : 부동소수인 실수 -1.79769313486231517E+308 부터 1.79769313486231517E+308 데이터를 담는다. 자바와 동일하게 메모리에서 데이터를 담는 방식 때문에 소수점 끝자리 일부가 손실될 수 있음으로 정밀한 데이터를 담아야하는 경우 사용하지 않는다. t는 전체 길이를, p는 소수점 길이를 제한하기 위해 사용한다. tp를 생략할 경우 부동소수로, 명시할 경우 고정소수 처럼 이용할 수 있다.
    • DECIMAL(t, p) : 고정소수인 실수 데이터를 담는다. 데이터 손실이 없는 대신 용량은 t + 1 바이트로 매우 크다. tp 값을 생략할 수 없다.

    문자형

    • CHAR(n) : 길이가 고정된 문자 데이터를 담기위해 사용한다. 고정 길이 n에 대해 255자까지 지원한다. 빈 공간을 채우기 때문에제한된 글자 수 미만의 글자를 적어도 총 용량 n만큼 차지하게 된다.
    • VARCHAR(n) : 길이가 가변적인 문자 데이터를 담기위해 사용한다. 최대 길이 n에 대해 65,535까지 지원한다. 빈 공간을 채우기 않기 때문에 입력된 글자 수 만큼만 용량을 차지한다.
    • TINYTEXT(n) : 문자열을 담기 위해 사용한다. n은 길이 제한이고 최대 255로 설정가능하다.
    • TEXT(n) : 문자열을 담기 위해 사용한다. n은 길이 제한이고 최대 65,535로 설정가능하다.
    • MEDIUMTEXT(n) : 문자열을 담기 위해 사용한다. n은 길이 제한이고 최대 16,777,215로 설정가능하다.
    • LONGTEXT(n) : 문자열을 담기 위해 사용한다. n은 길이 제한이고 최대 4,294,967,295로 설정가능하다.
    • 문자형에서 ~TEXT 타입은 VARCHAR와 달리, 그 데이터를 테이블에 대한 파일에 직접 저장하는 것이 아닌 외부 파일에 별도로 저장해놓고 해당 파일을 참조하도록 되어있기 때문에 인덱싱(Indexing)이 불가능하고 이에 따라 속도가 느리다.

    논리형

    • BOOLEAN : 참(TRUE)과 거짓(FALSE)에 대한 값을 담기 위해 사용한다. 사실, BOOLEAN은 가명이고 실제 타입은 TINYINT(1)로 처리된다. 각 참과 거짓은 숫자 10에 매칭된다.

    날짜 및 시간

    • YEAR : 년도를 가지기 위한 타입
    • DATE : 년, 월, 일 값을 가지기 위한 타입
    • TIME(n) : 시, 분, 초 값을 가지기 위한 타입. n 값은 밀리초를 담을 수 있는 길이를 의미하며 쵀대 6, 생략시 0이다.
    • DATETIME(n) : 년, 월, 일, 시, 분, 초 값을 가지기 위한 타입. n 값은 밀리초를 담을 수 있는 길이를 의미하며 쵀대 6, 생략시 0이다.
    • TIMESTAMP : DATETIME(0)과 동일하나, 내부적으로 유닉스 타임(Unix Time, Epoch Time)을 그 값으로 가진다.
      • 장점 : 시스템 시간이 변하면 변한 만큼 같이 변한다.
      • 단점 : 일시에 제한이 있다.
      • 유닉스 타임 : 1970-01-01 00:00:00 부터 지금까지 흐른 초(Second).

    기타

    • TINYBLOB(n) : 이진데이터를 담기 위해 사용한다. n은 길이 제한이고 최대 255로 설정가능하다. 생략시 최대 값을 이용한다.
    • BLOB(n) : 이진데이터를 담기 위해 사용한다. n은 길이 제한이고 최대 65,535로 설정가능하다. 생략시 최대 값을 이용한다.
    • MEDIUMBLOB(n) : 이진데이터를 담기 위해 사용한다. n은 길이 제한이고 최대 16,777,215로 설정가능하다. 생략시 최대 값을 이용한다.
    • LONGBLOB(n) : 이진데이터를 담기 위해 사용한다. n은 길이 제한이고 최대 4,294,967,295로 설정가능하다. 생략시 최대 값을 이용한다.

태그:

카테고리:

업데이트:

댓글남기기