숫자 타입
정수
TINYINT
- -128 ~ 127 범위, 1 바이트
INT
- 4 바이트
BIGINT
- 8 바이트
UNSIGNED
- 양수로 표현 가능
- TINYINT UNSIGNED 타입을 사용하면 범위가 0 ~ 255 로 바뀜
실수
고정 소수점 타입
- DECIMAL(M,D)
- M은 총자릿수 (정수부+수소부)를 의미, 65자리까지 표현 가능
- D는 소수부 의미
- ex) DECIMAL(30, 20): 정수부 10자리, 소수부 20자리
- 실수를 사용할 때는 DECIMAL을 사용하는 게 좋음. 실수를 사용하기 전에 정말 사용해야 하는 지를 먼저 고려하고, 사용해야 한다면 정확하게 사용할 수 있는 DECIMAL을 사용하는 게 좋음
부동 소수점 타입
- FLOAT, DOUBLE
문자 타입
CHAR, VARCHAR
CHAR(M)
- M은 고정 길이의 문자열(범위: 0~255)
- 설정한 길이 만큼의 데이터 공간 차지
- 부족한 입력 데이터는 공백으로 차지
VARCHAR(M)
- M은 문자열의 최대 길이를 의미(범위: 0~65,535)
- 가변 길이의 문자열. 실제 입력된 문자열의 길이만큼만 저장하고 사용
- 일반적으로 가장 많이 사용
- 메모리 위주 저장
TEXT
- 가변길이 문자
- 최대 65,535글자의 글자를 적재할 수 있음
- disk 위주의 저장으로 인해 조회속도가 VARCHAR에 비해 느림
BLOB
- 바이너리 데이터(ex. 이미지)를 저장할 수 있는 타입
- 현대적인 방법은 정적 파일 스토리지에 이미지를 저장하고, DB에는 이미지의 경로를 저장한다.
ENUM
- enum('user', 'admin')
- 미리 들어갈 수 있는 특정 데이터를 지정한다. insert 한 값이 특정 데이터에 속하지 않는 경우 에러 발생.
alter table author add column role enum('user', 'admin') not null default 'user';
insert into author(role) values('user');
날짜 타입
DATE
- 날짜를 저장할 수 있는 타입
- YYYY-MM-DD
DATETIME
- 날짜와 함께 시간까지 저장. 옵션을 통해 소수점까지 저장 가능
- YYYY-MM-DD HH:MM:SS
- 현재 시간 예약어: CURRENT_TIMESTAMP
alter table posts modify column created_time datetime default CURRENT_TIMESTAMP
특정 날짜, 기간 조회
DATE_FORMAT(date, format)
select * from post where DATE_FORMAT(created_time, '%Y-%m') = '2025-01';
LIKE
select * from post where created_time like '2023%';
BETWEEN
select * from post where created_time BETWEEN '2025-01-01' AND '2025-01-31';
비교 연산자
select * from post where created_time >= '2025-01-01' and created_time <= '2025-01-31';
now()
연산자
비교 연산자
- =
- !=, <>
- <. <=, >=, >
- IS NULL, IS NOT NULL
- BETWEEN min AND max
- IN(), NOT IN()
select * form author where id between 2 and 4;
select * from author id in (2, 3, 4);
select * from author where not (id < 0 or id > 1);
논리 연산자
검색 패턴
Like
- 특정 패턴을 포함하는 데이터를 검색하기 위한 와일드카드 문자
select * from author where name like '홍%';
select * from author where name not like '홍%';
REGEXP
select * from author where name REGEXP '[a-z]';
타입 변환
CAST
- CAST(a AS type)
- a값을 특정 type으로 변환하는데 사용
select CAST(20250101 AS DATE);
DATE_FORMAT
- 날짜/시간 타입의 데이터를 지정된 형식의 문자열로 반환
select DATE_FORMAT('2025-01-01', '%Y-%m-%d');