테이블을 만들 때는 데이터 형식을 설정해야 한다. 데이터 형식에는 크게 숫자형, 문자형, 날짜형이 있다. 또 세부적으로는 여러 개로 나뉘기도 한다. 이렇게 다양한 데이터 형식이 존재하는 이유는 실제로 저장될 데이터의 형태가 다양하기 때문이다. 각 데이터에 맞는 데이터 형식을 지정함으로써 효율적으로 저장할 수 있다.
데이터 형식
정수형
정수형은 소수점이 없는 숫자, 즉 인원 수, 가격, 수량 등에 많이 사용한다. 정수형의 크기와 범위는 다음과 같다.
데이터 형식 | 바이트 수 | 숫자 범위 |
TINYINT | 1 | -128 ~ 127 |
SMALLINT | 2 | -32,768 ~ 32,767 |
INT | 4 | 약 -21억 ~ +21억 |
BIGINT | 8 | 약 -900경 ~ +900경 |
문자형
문자형은 글자를 저장하기 위해 사용하며, 입력할 최대 글자의 개수를 지정해야 한다. 대표적인 문자형은 다음과 같다.
데이터 형식 | 바이트 수 |
CAHR(개수) | 1 ~ 255 |
VARCHAR(개수) | 1 ~ 16383 |
CHAR는 문자를 의미하는 Character의 약자로, 고정길이 문자형이라고 부른다. 즉, 자릿수가 고정되어 있다. 예를 들어 CHAR(10)에 '가나다' 3글자만 저장해도 10자리를 모두 확보한 후에 앞에 3자리를 사용하고 뒤의 7자리는 낭비하게 된다. 이와 달리 VARCHAR(Variable Character)는 가변길이 문자형으로, VARCHAR(10)에 '가나다' 3글자를 저장할 경우 3자리만 사용한다.
VARCHAR가 CHAR보다 공간을 효율적으로 운영할 수 있지만, MySQL 내부적으로 성능(빠른 속도) 면에서는 CHAR로 설정하는 것이 조금 더 좋다.
대량의 데이터 형식
문자형인 CHAR는 최대 255자까지, VARCHAR는 최대 16383자까지 지정이 가능하다. 그래서 더 큰 데이터를 저장하려면 다음과 같은 형식을 사용한다.
데이터 형식 | 바이트 수 | |
TEXT 형식 | TEXT | 1 ~ 65535 |
LONGTEXT | 1 ~ 4294967295 | |
BLOB 형식 | BOLB | 1 ~ 65535 |
LONBBLOB | 1 ~ 4294967295 |
TEXT로 지정하면 최대 65535자까지, LONGTEXT로 지정하면 최대 약 42억자까지 저장된다. 소설이나 영화 대본 같은 내용을 저장한다면 필요한 데이터 형식이다.
또, BLOB라는 용어가 등장했는데, BLOB는 Binary Long Object의 약자로 글자가 아닌 이미지, 동영상 등의 데이터라고 생각하면 된다. 이런 것을 이진(Binary) 데이터라고 부른다. 테이블에 사진이나 동영상과 같은 것을 저장하고 싶다면 BLOB나 LONGBOLB로 데이터 형식을 지정해야 한다. LONGTEXT 및 LONGBOLB로 설정하면 각 데이터는 최대 4GB까지 입력할 수 있다.
CREATE DATABASE netflix_db;
USE netfilx_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도 다른 일반적인 프로그래밍 언어처럼 변수를 선언하고 사용할 수 있다. 변수는 임시로 사용된다고 생각하면 된다.
MySQL에서 변수는 @변수이름 형식으로 만들고, SET 문으로 변수에 값을 대입한다.
USE market_db;
SET @myVar1 = 5; -- 변수를 선언하고 정수를 대입
SET @myVar2 = 4.25; -- 변수를 선언하고 실수를 대입
SELECT @myVar1; -- 변수 내용 출력
SELECT @myVar1 + @myVar2; -- 변수끼리 연산한 후에 출력
SET @txt = '가수이름 => '; -- 변수를 선언하고 문자열 대입
SET @height = 166;
SELECT @txt, mem_name FROM member WHERE height > @height; -- 테이블을 조회하면서 변수를 사용
LIMIT에는 변수를 사용할 수 없기 때문에 오류가 발생하는데 이 오류를 PREPARE EXECUTE로 해결 할 수 있다. PREPARE는 실행하지 않고 SQL문만 준비해 놓고 EXECUTE에서 실행하는 방식이다. 다음 SQL 을 실행해보자.
SET @count = 3; -- @count 변수에 3을 대입
PREPARE mySQL FROM 'SELECT mem_name, height FROM member ORDER BY height LIMIT ?' -- prepare는 'SELECT ~~ LIMIT ?' 문을 실행하지 않고 mySQL이라는 이름으로 준비만 해놓는다.
EXECUTE mySQL USING @count; -- EXECUTE로 mySQL에 저장된 SELECT 문을 실행할 때, USING으로 물음표(?)에 @count 변수의 값을 대입한다.
주의해서 볼 것은 LIMIT 다음에 오는 물음표(?)이다. ?는 현재는 모르지만 나중에 채워짐 정도로 이해하면 된다.
핵심 정리
정수형은 소수점이 없는 숫자이며, TINYINT, SMALLINT, INT, BIGINT 등이 있다
문자형은 고정형 문자형인 CHAR와 가변형 문자형인 VARCHAR가 있다.
실수형은 소수점 아래 7자리까지 표현되는 FLOAT와 소수점 아래 15자리까지 표현되는 DOUBLE이 있다.
날짜형은 날짜를 저장하는 DATE, 시간을 저장하는 TIME, 날짜와 시간을 저장하는 DATETIME이 있다.
MySQL에서 제공되는 변수 앞에는 @를 붙인다.
데이터 형식을 변경하는 형 변환 함수에는 CAST(), CONVERT()가 있다.
'혼공학습단 12기' 카테고리의 다른 글
[혼공S] 04 - 3 'SQL 프로그래밍' 정리 (0) | 2024.07.15 |
---|---|
[혼공S] 04 - 2 '두 테이블을 묶는 조인' 정리 (0) | 2024.07.14 |
[혼공S] 2주차 마무리 (0) | 2024.07.12 |
[혼공S] 03 - 3 '데이터 변경을 위한 SQL 문' 정리 (0) | 2024.07.11 |
[혼공S] 03 - 2 '좀 더 깊게 알아보는 SELECT 문' 정리 (0) | 2024.07.09 |