본문 바로가기

Study/SQL

MySQL 데이터의 형식

데이터 형식을 제대로 이해하면, 효율적으로 SQL을 활용할 수 있다. MYSQL에서 제공하는 데이터형을 먼저 알아보자.

 

정수형

데이터 형식 바이트 수 숫자 범위
TINYINT 1 -128 ~ 127
SMALLINT 2 -32,768 ~ 32,767
INT 4 약 -21억 ~ 21억
BIGINT 8 약 -900경 ~ 900경

나이를 지정할 때 TINYINT를 사용하기도 한다. 키의 경우 127CM를 넘는 사람들이 많기 때문에 TINYINT를 사용하면 범위가 부족하다. 이럴 때, 0부터 범위가 시작되는 UNSIGNED 예약어를 사용하면, 이를 해결할 수 있다. 

USE market_db;
CREATE TABLE member
(mem_id CHAR(8) NOT NULL PRIMARY KEY,
 mem_name VARCHAR(10) NOT NULL,
 mem_number TINYINT NOT NULL,
 addr CHAR(2) NOT NULL,
 phone1 CHAR(3), -- 국번(02, 031 ...)
 phone2 CHAR(8),
 height TINYINT UNSIGNED, -- UNSIGNED 붙이면 0부터 범위 지정
 debut_date DATE
 );

문자형

데이터 형식 바이트 수
CHAR(개수) 1~255
VARCHAR(개수) 1~16383

문자형 데이터는 글자를 저장하기 위해 사용하며, 최대 글자 개수를 지정해주어야 한다. CHAR은 고정길이 문자형으로, 지정한 자릿수 만큼의 저장 공간을 사용한다. 반면, VARCHAR은 가변길이 문자형으로 VARCHAR(10)에 3글자만 저장하면, 저장공간으로 3자리만 사용한다. *MYSQL 성능면에서는 CHAR로 설정하는 것이 더 좋다. 

 

대량의 데이터 형식

문자형 데이터에서 다루지 못하는 더 큰 데이터를 저장하려면 다음과 같은 형식을 사용한다. 

데이터 형식   바이트 수
TEXT TEXT 1 ~ 65535
LONGTEXT 1 ~ 4294967295
BLOB BLOB 1 ~ 65535
LONGBLOB 1 ~ 4294967295

BLOB(Binary long object) 데이터는 이진 데이터로 동영상 혹은 이미지 등을 저장하기 위해 사용한다. 

CREATE DATABASE netflix_db;
USE netflix_db;
CREATE TABLE movie
	(movie_id	INT,
     movie_title	VARCHAR(30),
     movie_director	VARCHAR(20),
     movie_star		VARCHAR(20),
     movie_script	LONGTEXT,
     movie_film		LONGBLOB
    );

실수형

데이터 형식 바이트 수 설명
FLOAT 4 소수점 아래 7자리까지 표현
DOUBLE 8 소수점 아래 15자리

날짜형

데이터 형식 바이트 수 설명
DATE 3 날짜만 저장. YYYY-MM-DD
TIME 3 시간만 저장. HH:MM:SS
DATETIME 8 둘 다. YYYY-MM-DD HH:MM:SS

 

변수의 사용

SQL도 변수 선언 및 사용이 가능하다.

SET @변수이름 = 변수 값 ; -- 변수 선언 및 값 대입 
SELECT @변수이름 ; -- 변수 값 출력

SQL에서는 문법상으로 변수를 사용하지 못하는 오류가 일어날 수 있다. 그럴 때 사용하는 것이 PREPARE과 EXECUTE이다.

SET @count = 3;
PREPARE mySQL FROM 'SELECT mem_name, height FROM member ORDER BY height LIMIT ?';
EXECUTE mySQL USING @count;

PREPARE을 통해 아직 사용하지 않는 SQL문을 준비해두고, 추후에 EXECUTE ~ USING을 사용해 실행할 수 있다. 이 때 PREPARE 구문에 꼭 ?를 붙여야 한다. 

 

데이터 형 변환

CAST (값 as 데이터_형식 [(길이)])
CONVERT (값, 데이터_형식 [(길이)])

이 때 올 수 있는 데이터 형식은 CHAR, SIGNED, UNSIGNED, DATE, TIME, DATETIME 등이 있다. 

 

하지만 CAST(), CONVERT()함수를 사용하지 않고 자연스럽게 형을 변환할 수도 있다. 

SELECT CONCAT(100, '200');

이렇게 문자와 숫자를 연결했을 때, 자연스럽게 100이 문자 '100'으로 변환되어 '100200'이라는 결과를 출력한다. 

'Study > SQL' 카테고리의 다른 글

JOIN  (1) 2022.07.31
COMPANY DB SQL문  (0) 2022.07.20
SQL 기본 문법  (0) 2022.07.16