[MariaDB] 데이터 타입과 기본 연산 및 함수

이지연·2025년 11월 21일

개요

이번 포스팅에서는 MySQL에서 자주 사용하는 데이터 타입과 기본 연산 및 함수들을 정리해볼거다.
개념정리와 실습 화면을 함께 정리해 볼 예정


1. 정수 타입 (INT 계열)

컴퓨터 데이터의 최소 단위는 bit(비트)이고, 8비트는 1바이트이다.
8비트로 표현 가능한 값의 개수는 (2^8 = 256) 개이며,
음수를 표현하려면 1비트를 부호용으로 사용해 대략 -128~127 범위를 표현한다.

  • TINYINT

    • 1 byte 사용
    • -128 ~ 127 (signed 기준)
    • UNSIGNED 사용 시 0 ~ 255
  • INT

    • 4 byte 사용
    • 약 -21억 ~ +21억
  • BIGINT

    • 8 byte 사용
    • 매우 큰 정수 범위 가능, 용량 크므로 필요한 경우에만 사용
ALTER TABLE author
ADD COLUMN age TINYINT UNSIGNED;

2. 정수 타입 변경 시 FK 제약 주의

외래키(FK)가 걸린 컬럼의 타입을 변경할 때는 순서대로 진행해야 한다.

ALTER TABLE post
DROP FOREIGN KEY fk_post_author;

ALTER TABLE author
MODIFY COLUMN id BIGINT;

ALTER TABLE post
MODIFY COLUMN author_id BIGINT;

ALTER TABLE post
MODIFY COLUMN id BIGINT;

ALTER TABLE post
ADD CONSTRAINT fk_post_author
FOREIGN KEY (author_id)
REFERENCES author(id);
  • FK 제약조건 때문에 부모/자식 컬럼의 타입을 동기화하는 것이 중요하다.
FK 제약으로 인해 위 순서대로 실행한 예시

3. 실수 / 소수 타입 (DECIMAL)

DECIMAL(m, d)는 고정 소수점 숫자 타입이다.

  • m : 전체 자리수(정수부 + 소수부)
  • d : 소수부 자리수
ALTER TABLE author
ADD COLUMN height DECIMAL(4, 1);

INSERT INTO author (id, name, email, height)
VALUES (7, '홍길동3', 'sss@naver.com', 173.5);

소수부가 자리수보다 많으면 자동 반올림된다.

자리수가 넘치게 insert된 경우 반올림된 예시

4. 문자 / BLOB / ENUM

문자 타입

  • CHAR(m) : 고정 길이, 부족하면 공백 채움
  • VARCHAR(m) : 가변 길이 (실제 문자 길이만큼 저장)
  • TEXT : 긴 텍스트, 가변 길이
  • LONGTEXT : 매우 긴 텍스트
ALTER TABLE author
ADD COLUMN id_number CHAR(16);

ALTER TABLE author
ADD COLUMN self_introduction TEXT;

BLOB (Binary Large Object)

이미지 등 이진 데이터를 저장할 때 사용한다.
현실적으론 파일 경로 등 메타정보만 DB에 저장하는 경우가 많다.

ALTER TABLE author
ADD COLUMN profile_image LONGBLOB;

INSERT INTO author (id, name, email, profile_image)
VALUES (9, 'blob', 'blob@naver.com', LOAD_FILE('C:\\\\test.jpg'));
GUI툴 이용 시 BLOB 데이터 타입의 실제 이미지를 별도의 변환없이 바로 확인해 볼 수 있다

ENUM

미리 정해진 값들 중 하나만 허용하는 타입.

ALTER TABLE author
ADD COLUMN role ENUM('admin', 'user');

ALTER TABLE author
MODIFY COLUMN role ENUM('admin', 'user') NOT NULL DEFAULT 'user';

INSERT INTO author (id, name, email, role)
VALUES (11, 'admin', 'admin@naver.com', 'admin');
  • ENUM에 없는 값 넣으면 에러 발생.
  • 기본값 설정 가능.
ENUM에 지정된 데이터를 insert / 지정되지 않은 데이터 inert(오류발생), 지정하지 않고 insert 예시 이미지

5. 날짜/시간 타입 및 패턴

  • DATE : YYYY-MM-DD
  • DATETIME : YYYY-MM-DD HH:MM:SS
CREATE TABLE post (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255),
    created_time DATETIME DEFAULT CURRENT_TIMESTAMP
);
CURRENT_TIMESTAMP는 많이 사용되는 패턴이다

6. 비교 연산자 / NULL / BETWEEN / IN

  • = : 같음
  • !=, <> : 다름
  • <, <=, >, >= : 크기 비교
  • IS NULL / IS NOT NULL
  • BETWEEN min AND max (min과 max 포함)
  • IN (val1, val2, ...) / NOT IN
SELECT * FROM author WHERE email IS NULL;
SELECT * FROM author WHERE id BETWEEN 2 AND 4;
SELECT * FROM author WHERE id IN (2, 3, 4);

7. 논리 연산자 (AND / OR / NOT)

-- AND / &&
SELECT * FROM author WHERE name = '홍길동' AND email = 'abc@naver.com';

-- OR / ||
SELECT * FROM author WHERE name = '홍길동' OR email = 'abc@naver.com';

-- NOT / !
SELECT * FROM author WHERE NOT (name = '홍길동');

8. 검색 패턴 (LIKE / REGEXP)

  • LIKE : 와일드카드 % 사용
  • REGEXP : 정규표현식 패턴 검색
SELECT * FROM post WHERE title LIKE 'h%';
SELECT * FROM author WHERE name REGEXP '^[가-힣]+$';

9. 타입 변환(CAST) / 날짜 포맷(DATE_FORMAT)

-- CAST 예시
SELECT CAST('12' AS UNSIGNED);

-- DATE_FORMAT 예시
SELECT DATE_FORMAT(created_time, '%Y-%m-%d') AS created_date FROM post;

10. 날짜 범위 조회 패턴 (실무 중요)

-- 문자열 패턴
SELECT * FROM post WHERE created_time LIKE '2025-11%';

-- 정확한 범위 지정 (시작일 이상, 종료일 다음날 미만)
SELECT * FROM post
WHERE created_time >= '2025-11-01'
  AND created_time <  '2025-11-20';


마치며

연산이나 다양한 제약조건등을 한꺼번에 다루려고하니 순서가 조금 헷갈린다
연습을 해야 익혀질 듯

profile
Eazy하게

1개의 댓글

comment-user-thumbnail
2025년 12월 11일

와우 ;; 그럼 비트코인을 8개모으면 바이트코인이된다는 찌라시가진짜엿군요 감사합니다 오늘부터 채굴합니다

답글 달기