키워드
데이터 타입, 숫자, 문자, 배열, 구조체
숫자
- 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
- MEDIUMINT
- 중간 크기 정수
- 약 1670만개의 정수 표현 가능 (24비트 사용)
- INT
- 정수
- 42.9억개의 정수 표현 가능 (32비트 사용)
- BIGINT
- INT보다 2배 많은 비트 사용
- SERIAL은 부호가 없는 정수
- DECIMAL(M,D)
- 고정소수점 타입
- D는 소수점 이하 자리 갯수를 정해주는 것임 → 고정소수점
- FLOAT
- 부동 소수점 타입
- 4바이트 → 32비트 사용 (int와 동일)
- DOUBLE
문자
- CHAR
- 고정된 길이(0~255)의 문자열
- 선언된 값보다 짧은 문자열이 들어오면, 빈 문자열로 나머지 길이를 채움 → 비효율적
- 선언된 값보다 긴 문자열이 들어오면 에러
- 오버되는 문자가 공백이면 무시하고 insert
- 하지만 선언된 값 이내의 길이면 공백도 저장됨
- char(4) 라고하면, 최대 4의 길이를 갖는 데이터가 들어갈 수 있음
- 한글은 한 글자에 3바이트, 영문은 1바이트를 차지
- VARCHAR
- 변동 가능한 길이(65535)의 문자열, 길이를 지정해둠
- 문자열 크기도 함께 저장 → freefix(255바이트 이하면 1바이트 사용, 이상이면 2바이트 사용)
- TEXT
- 길이를 지정하지 않음.
- 길이 최대 65535 (16비트)
- 문자열 덩어리를 집어넣음
- 기본값 지정 불가
- 쿼리 시 메모리가 아닌 디스크 사용 → 반환이 느림!
- TINYTEXT
- MEDIUMTEXT
- LONGTEXT
- 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_TYPE
-
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
SELECT JSON_EXTRACT(info, '$.off') as off
FROM managers_v2;
SELECT JSON_EXTRACT(info, '$.off[1]') as off
FROM managers_v2;
-
JOSN_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);
- 그럼 데이터 마다 다른 값으로 설정해주고싶다면 어떻게 해야하지?