본문 바로가기
Programming/MariaDB

Maria DB 이론_ 04. 테이블 및 열

by yoon9i 2024. 3. 6.
/*
    <테이블 및 열>


    <테이블>

    ◎ 테이블(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 `기준 열`;
                #순서를 가장 위에 두겠다.
                ALTER 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이 사용된다.
                ex) `age` TINYINT(2) : 2자리 이용가능
            -> TINYINT(n) UNSIGNED
            : 0부터 255까지의 정수를 가질 수 있다. 이때 n 은 자리수 제한이고 생략시 3이 이용된다.
                ex) `age` TINYINT(n) UNSIGNED
            -> SMALLINT(n)
            : -32,768 부터 32,767 까지의 정수를 가질수 있다. 이때, n 은 자리수 제한이고 생략시 5가 사용된다.
            -> MEDIUMINT(n)
            : -8,388,608 부터 8,388,607 까지의 정수를 가질수 있다.
            -> INT(n)
            : -2,147,483,648 부터 2,147,483,647 까지의 정수를 가질 수 있다.
            -> BIGINT(n)
            : -9,223,372,036,854,775,808 부터 9,223,372,036,854,775,807 까지의 정수를 가질수 있다.

            => 위 정수형에서 n 은 길이 제한이고, 이를 생략할 경우 가질 수 있는 최대 길이를 사용한다.
            => 위 정수형 뒤에 UNSIGNED 를 붙이면 (가령 TINYINT UNSIGNED) 부호를 사용하지 않는 대신 음수(0미만)
               에 해당하는 값 크기만큼 양수에서 추가로 이용할 수 있게 된다.
               가령, TINYINT UNSIGNED 의 범위는 0 부터 255 까지 이다.

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

        - 문자형
            -> CHAR(n)
            : 길이가 고정된 문자 데이터를 담기위해 사용한다. 고정길이 n 에 대해 알파뉴메릭(Alphanumeric)
              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)로 처리된다. 각 참과 거짓은 숫자 1 과 0 에 매칭된다.

        - 날짜 및 시간
            -> DATE
            : 년,월,일 값을 가지기 위한 타입
            -> TIME(n)
            : 시,분,초 값을 가지기 위한 타입. n 값은 밀리초를 담을 수 있는 길이를 의미하여 생략시 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로 설정가능하다. 생략시 최대 값을 이용한다.




*/

'Programming > MariaDB' 카테고리의 다른 글

Maria DB 이론_ 06. 연산자  (0) 2024.03.06
Maria DB 이론_ 05. 레코드  (0) 2024.03.06
Maria DB 이론_ 03. 스키마  (0) 2024.03.06
Maria DB 이론_ 02. 사용자  (0) 2024.03.06
Maria DB 이론_ 1. 서론  (0) 2024.03.06