데이터분석

13. 데이터 타입

장수우 2023. 12. 6. 17:00
학습주제
  • 다양한 데이터 타입 다루기
    1. 숫자
    2. 문자
    3. 이진
    4. Array
    5. Key-value
주요 메모 사항 소개
  • 숫자 데이터 타입 (비고란의 크기는 전부 byte 입니다.)
데이터 타입 의미 비고
BIT (M) 01로만 구성
ex) b’111’ = 7
1 <= M <= 64
기본값 M = 1
TINYINT 매우 작은 정수 Signed 범위 : -127 ~ 127
Unsigned 범위 : 0 ~ 225
BOLL, BOOLEAN True / False TINYINT(1) 과 같다.
0이면 False, 1이면 True
SMALLINT 작은 정수 -32768 ~ 32767
0 ~ 65535
MEDIUMINT 중간 크기 정수 -8388608 ~ 8388607
0 ~ 16777215
INT, INTEGER 정수 -2147483648 ~ 2147483647
0 ~ 4294967295
BIGINT, SERIAL INT 타입보다 2배 많은 비트를 사용하는 정수 -9223372036854775808 ~
9223372036854775807
0 ~ 18446744073709551615
DECIMAL(M,D), DEC, FIXED 고정소수점 타입 M <= 65
0 <= D <= 30
FLOAT 부동소수점 타입 4 bytes
DOUBLE 부동소수점 타입 8 bytes

                상세설명 →  https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html

 

  • 문자 타입
데이터 타입 의미 비고
CHAR 고정된 길이의 문자열 0 ~ 255 byte
선언된 값보다 짧은 문자열이 들어오면,
빈 문자열로 나머지 길이를 채운다.
VARCHAR 변동 가능한 길이의 문자열 0 ~ 65535 byte
TEXT 변동 가능한 길이의 문자열 최대 65535 byte (길이 설정 불가)
Non-binary strings (=character strings)
기본값 지정 불가
TINYTEXT 작은 TEXT 최대 255 byte
MEDIUMTEXT 중간크기 TEXT 최대 16777215 byte
LONGTEXT 큰 크기 TEXT 최대 4294967295 byte
ENUM 최초에 지정해 둔 리스트에 포함되는 값만 저장 효율적인 데이터 저장이 가능하나
유연성, 확장성이 낮다.
SET 최초에 지정해 둔 리스트에
포함되는 값들을 중복으로 저장
최대 64

                상세설명 → https://dev.mysql.com/doc/refman/8.0/en/string-types.html

 

  • 이진
데이터 타입 의미 비고
BLOB Binary Large Object 최대 65535 byte (길이 설정 불가)
기본값 지정 불가
TINYBLOB 작은 BLOB 최대 255 byte
MEDIUMLOB 중간 크기 BLOB 최대 16777215 byte
LONGLOB BLOB 최대 4294967295 byte
BINARY Binary strings (고정된 길이) 0 ~ 255 byte
선언된 값보다 짧은 문자열이 들어오면,
빈 문자열로 나머지 길이를 채운다
VARBINARY Binary Strings (변동 가능한 길이) 0 ~ 255 최대 16777215 byte

 


  • Array
    • 데이터가 저장된 리스트
      ex) ['a', 'b', 'c'] / [1, 2, 3]
    • Element (원소) : Array에 저장된 각 데이터이다.
    • JSON 타입으로 배열을 저장한다.
    • 기본값 설정 불가능하다.
  • JSON_ARRAY : 입력을 JSON 배열로 반환하는 함수
CREATE TABLE IF NOT EXISTS `products` ( -- table을 생성하고
  `product_id` int(6) NOT NULL,
  `category` varchar(40) NOT NULL,
  `name` varchar(10) NOT NULL,
  `price` int unsigned NOT NULL,
  `options` JSON NULL,
  PRIMARY KEY (`product_id`)
);

INSERT INTO `products` (`product_id`, `category`, `name`, `price`, `options`) VALUES
(0, '키즈', '어린이칫솔', 1500, JSON_ARRAY('빨강', '파랑')),  -- JSON ARRAY 를 사용했습니다.
(1, '스포츠', '손목보호대', 10000, JSON_ARRAY('S', 'M', 'L')),
(2, '주방용품', '밥그릇', 2000, JSON_ARRAY('소', '중', '대')),
(3, '디지털', '마우스', 15000, NULL);

위의 코드를 실행하면 이런 테이블이 나옵니다. options에 배열로 생성된걸 확인할 수 있습니다.

  • JSON_TYPE : JSON 데이터의 타입을 반환하는 함수
SELECT options, JSON_TYPE(options)
FROM products;

JSON_TYPE이 array로 나오는걸 확인할 수 있습니다.

  • JSON_EXTRACT : Array 내부 데이터에 접근하는 함수 = indexing
SELECT JSON_EXTRACT(options, '$') as all_elements  -- '$' 는 키를 지정하는 것 
FROM products                                      -- '$' 뒤에 아무것도 없으면 전체

SELECT JSON_EXTRACT(options, '$[0]') as all_elements  -- '$[0]' 1번째 위치
FROM products

  • Key-value : Key와 Value로 이루어진 데이터
    • Key를 통해 Value에 접근할 수 있다.
      ex) {'이름' : '홍길동', '부서' : '개발팀', '직책' : '팀장', '근무지', : '판교'}
            {'색상' : ['빨강', '파랑'], '사이즈' : ['S', 'M', 'L']}
    • JSON 타입으로 key-value를 저장
  • JSON_OBJECT
CREATE TABLE IF NOT EXISTS `managers_v2` (
  `id` int unsigned NOT NULL,
  `name` varchar(40) NOT NULL,
  `managing` varchar(50) NOT NULL,
  `info` JSON NULL,
  PRIMARY KEY (`id`)
);


INSERT INTO `managers_v2` (`id`, `name`, `managing`, `info`) VALUES 
(0, '영희', '스포츠', JSON_OBJECT('off', JSON_ARRAY('일', '월'), 'substitute', '민수')),
(1, '철수', '주방용품', JSON_OBJECT('off', JSON_ARRAY('화', '수'), 'substitute', '길순')),
(2, '민수', '디지털', JSON_OBJECT('off', JSON_ARRAY('목', '금'), 'substitute', '철수')),
(3, '길순', '키즈', JSON_OBJECT('off', JSON_ARRAY('금', '토'), 'substitute', '영희'));

이렇게 키-쌍값으로 나옵니다.

  • JSON_EXTRACT
SELECT JSON_EXTRACT(info, '$.off') as off
FROM managers_v2

  • JSON_INSERT
UPDATE managers_v2 set info = JSON_INSERT(info, '$.new', JSON_ARRAY(1,2,3,4));

키 : '$.new',  값 : JSON_ARRAY(1,2,3,4)

  • JSON_REPLACE
UPDATE managers_v2 set info = JSON_INSERT(info, '$.new', 1);

  원래는 이 코드를쓰면 new 값이 1로 변경되어야 하는데 배열이라 변경되지 않는 것 같습니다.

  배열 사용시 아래 코드를 쓰면 되겠습니다.

UPDATE managers_v2 SET info = JSON_SET(info, '$.new', JSON_ARRAY(5, 6, 7));

new 값이 바뀐걸 확인할 수 있습니다.

 

공부하면서 어려웠던 내용
  • 키-쌍값 배열 값 변경하는 부분이 어려웠던 것 같습니다.
반응형