본문 바로가기
Database

[MariaDB] 데이터타입

by qoth_0 2023. 11. 22.
728x90
반응형

타입(data type) - 숫자

  • 테이블의 타입확인

    DESCRIBE 테이블명;

- 숫자 타입

  • 정수
    • TINYINT
      • -128~ 127범위(2의8승=256), 1바이트 //1바이트=8비트 바이트가 커질수록 내가 표현할 수 있는 숫자가 커짐
      • JAVA의 byte와 매핑
    • INT
      • 4바이트(2의8승*4)
      • JAVA의 int타입과 매핑
    • BIGINT
      • 8바이트
      • JAVA와 long타입과 매핑
    • UNSIGNED 타입을 사용하여 양수만 표현가능
      • 표현값 2배로 증가
      • TINYINT UNSIGNED 이렇게 사용한다면 255까지 사용 가능 ex)나이

  • 실수
    • 부동 소수점 타입(소숫점을 이진법으로 표현)
      • FLOAT(M,D), DOUBLE(M,D)
      • 오차가 발생할 여지가 있음
    • 고정 소수점 타입 - 권유(속도는 느리지만 오차없음)
      • DECIMAL(M,D)
        • JAVA의 Bigdecimal
        • M은 총자릿수 (정수부 + 소수부)를 의미하고, 65자리까지 표현가능
        • D는 소수부 의미
        • 정확한 숫자 표현을 위해 사용

        → CREATE TABLE post(price DECIMAL(10,3));

실습

  • author 테이블에 age 데이터 tinyint unsigned로 추가
    • 255이하로 insert, 255초과로 insert테스트
ALTER TABLE author ADD COLUMN age tinyint unsigned;
insert into author(id, name, age) values (6, '사', 23);
insert into author(id, name, age) values (7, '사', 277);

→ 277은 255를 초과하므로 에러발생 (out of range : 범위 벗어남) - insert 불가

  • post에 price라는 원고료 컬럼을 추가, 원고료 컬럼은 총자릿수 10자리 및 소수점단위는 3자리까지 가능
    • 컬럼 추가 후 비어있는 컬럼에 숫자 update test(소숫점 세자리 이하 test, 소숫점 세자리 초과 테스트)
ALTER TABLE post add COLUMN price decimal(10,3);
update post set price=11.111 where id=1;
update post set price=11.112222 where id=2;

→ UPDATE는 되나 자릿수가 잘려서 입력됨

타입(data type) - 문자

  • CHAR와 VARCHAR
    • CHAR(M)
      • M은 문자열의 최대 길이를 의미
      • 고정 길이의 문자열(0~255까지 설정가능)
      • 데이터가 255바이트보다 작아도 255바이트 차지
      • 정해진 자릿수 문자에 제한을 두기 위해서는 사용
    • VARCHAR(M)
      • java의 String 사용 시 varchar
      • 0부터 65,535까지 설정가능
      • 가변 길이의 문자열(M을 통해 길이지정)
      • B-tree 인덱싱 - 조회 빠름
      • 길이를 지정하더라도 실제 입력된 문자열의 길이만큼만 저장하고 사용
      • 일반적으로 가장 많이 사용

  • TEXT
    • 65,535바이트 저장 가능한 가변길이 문자열을 위한 타입(MAX지정 X, ex: name TEXT 로만 설정)
    • VARCHAR보다 더 큰 범위의 표현이 가능 ex)LONGTEXT는 4GB - LONGTEXT는 사용 가능성 있음
    • disk에 저장해서 조회속도가 VARCHAR(메모리저장)에 비해 느림
    • index 사용의 어려움(B-tree인덱싱 불가(VARCHAR는 가능), Full-Text 인덱스만 가능) - 조회속도 느림

    → 이러한 단점때문에 잘 사용 안함 주로 VARCHAR 사용 / 엄청긴문자열을 사용해야할 때 LONGTEXT 사용

  • BLOB(longblob)
    • 다양한 크기의 바이너리 데이터(이진데이터)를 저장할 수 있는 타입
    • 일반적으로 PNG와 같은 이미지 파일을 저장할 때 지정하는 타입
    create table table_blob(id int, myimg longblob);
    insert into table_blob (id, myimg) values (1, load_file('C:\\test_picture.jpg'));
    select * from table_blob; -- blob으로 조회됨
    select hex(myimg) from table_blob where id = 1; -- 16진수로 조회됨

    → 위 16진수를 통해 원본 이미지 확인 가능

  • ENUM
    • 미리 들어갈 수 있는 특정 데이터의 값을 지정
    • 컬럼명 ENUM(’데이터값1’, ‘데이터값2’, …)
    • NOT NULL DEFAULT ‘user’ 등의 옵션도 추가 가능

실습

  • role 타입을 enum타입으로 변경하고, ‘user’, ‘admin’으로 enum타입 지정.
  • not null로 설정하되, 입력이 없을 시에는 ‘user’로 세팅되도록 default 설정
  • test는 admin으로 데이터 세팅후 insert/ super-user 데이터로 insert / role 데이터 없이 insert
update author set role='user'; -- alter하기 위해 기존 role 데이터 변경
ALTER TABLE author MODIFY COLUMN role enum('user', 'admin') NOT NULL default 'user';
describe author;
insert into author (id, name, role) values (1, 'qoth', 'admin');
insert into author (id, name, role) values (2, 'qoth', 'super-user');
insert into author (id, name) values (3, 'qoth');
select * from author;

→ describe로 변경된 role의 type과 default 확인 가능

→ id 2번은 enum 외의 값이기 때문에 에러 발생

→ 3번은 role을 입력안했지만 default를 설정해두었기 때문에 user로 채워짐

타입(data type) - 날짜와 시간

  • DATE
    • 날짜를 저장할 수 있는 타입
    • YYYY-MM-DD 형식
  • DATETIME(m)
    • 날짜와 함께 시간까지 저장, m 지정 시 소수점 microseconds
    • YYYY-MM-DD HH:MM:SS 형식
    • 가장 많이 사용
    • JAVA의 localdatetime과 sync
  • DATETIME DEFAULT CURRENT_TIMESTAMP - DB설계시 기본세팅으로 들어감(필수)
    • 현재 시간을 default로 삽입하는 형식 - 자바, 스프링, 도커, 리눅스, 데이터베이스 등 기본은 utc 기준

실습

post 테이블에 DATETIME으로 created_time 컬럼 추가 및 default로 현재시간 들어가도록 설정

  • datetime(6) default current_timestamp(6)
  • 컬럼 추가 후 insert 테스트
ALTER TABLE post add COLUMN created_time datetime(6) default current_timestamp(6);
insert into post (id) values (7);

→ 기존에 있던 데이터들의 created_time도 채워짐


Uploaded by N2T

728x90
반응형

'Database' 카테고리의 다른 글

[MariaDB] 제약조건  (0) 2023.11.22
[MariaDB] 연산자  (1) 2023.11.22
[MariaDB] DML  (1) 2023.11.22
[MariaDB] DDL  (1) 2023.11.22
[MariaDB] 설치, MariaDB란  (1) 2023.11.22