데브코스 13일차 - 데이터 타입

kiki·2024년 3월 7일
0

데브코스

목록 보기
3/17

키워드

데이터 타입, 숫자, 문자, 배열, 구조체

숫자

  • BIT(M)
    • 컴퓨터가 데이터를 저장하는 기본 단위
    • M이 4가 입력되면 비트 4개에 값을 담게됨
  • TINYINIT
    • 매우 작은 정수
    • 256개만 표현 가능 (-127~127, 0~255(unsigned) → 8비트(2^8이므로) 사용)
    • 훨씬 더 적은 공간을 차지
    • 적은 수만 사용하는 변수의 경우 TINYINT를 사용하면 공간을 아낄 수 있다.
  • BOOL, BOOLEAN
    • True(1), False(0)
    • if문에서는 0이 아닌 다른 숫자는 모두 True로 여김
    • 하지만, TRUE, FALSE라는 특수 키워드를 쓴다면 이는 1과 0으로 1대1 대응된다.
      • 즉 2=TRUE(2=1이라고 쓴 것과 같음)라는 식을 준다면 이는 false를 반환
      • 2=FALSE(2=0이라고 쓴 것과 같음)라고 해도 false를 반환
    • IF(sales, ‘On sale!’, ‘NA’)라고 하면 sales(bool type) 값에 따라 결과를 출력함
  • SMALLINT
    • 작은 정수
    • 16개의 비트 사용
  • MEDIUMINT
    • 중간 크기 정수
    • 약 1670만개의 정수 표현 가능 (24비트 사용)
  • INT
    • 정수
    • 42.9억개의 정수 표현 가능 (32비트 사용)
  • BIGINT
    • INT보다 2배 많은 비트 사용
    • SERIAL은 부호가 없는 정수
  • DECIMAL(M,D)
    • 고정소수점 타입
    • D는 소수점 이하 자리 갯수를 정해주는 것임 → 고정소수점
  • FLOAT
    • 부동 소수점 타입
    • 4바이트 → 32비트 사용 (int와 동일)
  • DOUBLE
    • 부동소수점 타입
    • 8바이트 → 64비트 사용

문자

  • CHAR
    • 고정된 길이(0~255)의 문자열
    • 선언된 값보다 짧은 문자열이 들어오면, 빈 문자열로 나머지 길이를 채움 → 비효율적
    • 선언된 값보다 긴 문자열이 들어오면 에러
    • 오버되는 문자가 공백이면 무시하고 insert
      • 하지만 선언된 값 이내의 길이면 공백도 저장됨
    • char(4) 라고하면, 최대 4의 길이를 갖는 데이터가 들어갈 수 있음
      • 즉 길이는 문자 기준임 (not 바이트)
    • 한글은 한 글자에 3바이트, 영문은 1바이트를 차지
  • VARCHAR
    • 변동 가능한 길이(65535)의 문자열, 길이를 지정해둠
    • 문자열 크기도 함께 저장 → freefix(255바이트 이하면 1바이트 사용, 이상이면 2바이트 사용)
  • TEXT
    • 길이를 지정하지 않음.
    • 길이 최대 65535 (16비트)
    • 문자열 덩어리를 집어넣음
    • 기본값 지정 불가
    • 쿼리 시 메모리가 아닌 디스크 사용 → 반환이 느림!
  • TINYTEXT
    • 255 (8비트)
  • MEDIUMTEXT
    • 16777215 (24비트)
  • LONGTEXT
    • 32비트
  • ENUM
    • 리스트에 있는 제한된 값만 삽입할 수 있도록 함
    • 효율적인 데이터 저장 (문자열이 아닌 인덱스(?)를 저장함으로써 메모리를 아낌)
    • 하지만 유연성, 확장성이 낮다.
    • 값이 고정되어있고, 데이터에 변동이 없을 것으로 예상될 때 사용
    • ENUM(’xs’,’s’,’m’,’l’,’xl’)과 같이 리스트 지정
  • SET
    • 리스트에 있는 제한된 값만 삽입할 수 있도록 함
    • 가능한 값 리스트에 모든 조합이 올 수 있음

이진 (binary)

  • BLOB
    • TEXT와 유사 (TEXT 파일은 바이너리 파일에 포함됨)
    • 문자열 뿐만 아니라 무슨 데이터든 집어 넣음
    • 이진 형식으로 저장됨
    • 길이 최대 16비트
  • BINARY
    • 바이트 기준으로 길이 지정! (not 문자)
    • binary로 문자 저장하면 출력도 binary로 되니 CAST(name as char)로 변경하면 문자로 표현 가능

배열

  • Array (배열) - 데이터가 저장된 리스트

    • ex) [1,3,5] → 문자와 숫자가 섞일 수 있음
  • Element (원소)

  • json 타입으로 배열을 저장

  • JSON_ARRAY

    • 입력을 JSON 배열로 반환하는 함수
  • JSON_TYPE

    • JSON 타입의 데이터를 반환하는 함수
  • JSON NULL로 타입 지정하고, 실제 데이터에 JSON_ARRAY(’빨강’,’파랑’)으로 insert

    • 상품의 option들을 이 타입으로 추가해줄 수 있음
  • 혹은 JSON_ARRAY를 사용하지 않고 ‘[”빨강”,”파랑”]’으로 insert도 가능

    • 이 때는 홑따옴표와 쌍따옴표의 구분을 해줘야함
  • nasted array

    JSON_ARRAY(JSON_ARRAY('흰색','검정'),JSON_ARRAY('빨강','파랑'),JSON_ARRAY('노랑','초록'))
  • JSON_EXTRACT

    • 전체 데이터를 가져올 때
      • JSON_EXTRACT(options, ‘$’)
    • 특정 인덱스의 데이터를 가져올 때
      • JSON_EXTRACT(options, ‘$[0]’)

구조체 (key-value)

  • Key-value
    • Key를 통해 value에 접근할 수 있음
    • value로 배열이 들어갈 수도 있음
  • json 타입으로 저장
JSON_OBJECT('off', JSON_ARRAY('일','월'), 'substitute','민수')
  • off가 첫번째 key고, JSON_ARRAY('일','월')가 그에 해당하는 value임

  • substitute가 두번째 key고 민수가 그에 해당하는 value

  • 즉 JSON_OBJECT에 key-value를 여러개 담을 수 있는 것 같다.

  • JSON_EXTRACT

    -- JSON_EXTRACT로 value 조회하기
    SELECT JSON_EXTRACT(info, '$.off') as off
    FROM managers_v2;
    
    SELECT JSON_EXTRACT(info, '$.off[1]') as off --value의 인덱싱도 가능
    FROM managers_v2;
  • JOSN_INSERT

    -- 새로운 key-value insert
    UPDATE managers_v2 set info = JSON_INSERT(info, '$.new', JSON_ARRAY(1,2,3,4));
    
    -- 이미 있는 값을 변경
    UPDATE managers_v2 set info = JSON_REPLACE(info, '$.new', 1);
    • 그럼 데이터 마다 다른 값으로 설정해주고싶다면 어떻게 해야하지?

0개의 댓글