[MySQL] 데이터 형식
January 27, 2023
🚀 데이터 형식
💡 정수형
데이터 형식
바이트 수
숫자 범위
TINYINT
1
-128 ~ 127
SMALLINT
2
-32,768 ~ 32,767
INT
4
약 -21억 ~ +21억
BIGINT
8
약 -900경 ~ +900경
👀 UNSIGNED
컬럼 내에서 음수를 포함하지 않거나 혹은 수의 range를 양수쪽으로 더 넓게 가지고 싶을 때 사용
예를 들어, 키의 경우 음수값이 존재하지 않고 TINYINT의 최대값이 127로 200cm가 넘는 사람도 있기 때문에 범위가 부족
이 때 UNSIGNED 예약어를 사용하게 되면 범위가 0부터 시작하게 되어 같은 1Byte지만 표현 가능한 최대값이 더 증가하게 됨
TINYINT
TINYINT UNSIGNED
1 Byte
-128 ~ 127
0 ~ 255
💡 문자형
데이터 형식
바이트 수
CHAR(개수)
1~255
VARCHAR(개수)
1~16383
CHAR(Character): 고정길이 문자형(자릿수 고정)
VARCHAR(Variable Character): 가변길이 문자형(사용되는 부분까지만 자리 확보)
VARCHAR가 CHAR보다 공간을 효율적으로 운영할 수 있으나, MySQL 내부적으로 성능(빠른 속도)면에서는 CHAR 로 설정하는 것이 조금 더 좋음
CHAR는 글자의 개수가 고정된 경우, VARCHAR는 글자의 개수가 변동될 경우에 사용하는 것이 효율적
💡 대량의 데이터 형식
문자형 CHAR는 최대 255자, VARCHAR는 최대 16383자까지 지정 가능
데이터 형식
바이트 수
TEXT 형식
TEXT
1~65535
LONGTEXT
1~4294967295
BLOB 형식
BLOB
1~65535
LONGBLOB
1~4294967295
TEXT : 소설이나 영화 대본과 같은 내용 저장시 필요한 데이터 형식
BLOB (Binary Long Object): 글자가아닌 이미지,동영상 등의 데이터(이진 데이터)
LONGTEXT, LONGBLOB 로 설정시 최대 4GB까지 입력 가능
💡 실수형
데이터 형식
바이트 수
설명
FLOAT
4
소수점 아래 7자리까지 표현
DOUBLE
8
소수점 아래 15자리까지 표현
💡 날짜형
데이터 형식
바이트 수
설명
DATE
3
날짜만 저장. YYYY-MM-DD 형식으로 사용
TIME
3
시간만 저장. HH:MM:SS 형식으로 사용
DATETIME
8
날짜 및 시간 저장. YYYY-MM-DD HH:MM:SS 형식으로 사용
🚀 변수의 사용
변수는 MySQL 워크벤치를 재시작할 때까지는 유지되나, 종료하면 없어짐
SET @변수이름 = 변수값 ; -- 변수 선언 및 값 대입
SELECT @변수이름 ; -- 변수 값 출력
-- 변수 선언
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 에서는 변수 사용 불가 👉 문법상 오류
SET @count = 3 ;
SELECT mem_name, height
FROM member
ORDER BY height
LIMIT @count; -- error
💡 PREPARE, EXECUTE
PREPARE는 실행하지 않고 SQL문만 준비해 놓고 EXECUTE에서 실행하는 방식
위와 같은 오류 해결 가능
SET @count = 3;
PREPARE mySQL FROM 'SELECT mem_name, height FROM member ORDER BY height LIMIT ?';
EXECUTE mySQL USING @count;
PREPARE는 ‘SELECT ~ LIMIT ?’문을 실행하지 않고 mySQL이라는 이름으로 준비만 해놓음
LIMIT 뒤의 물음표(?): 현재는 모르지만 나중에 채워질 것이라는 의미
EXECUTE로 mySQL에 저장된 SELECT문을 실행할 때, USING 으로 물음표(?)에 @count 변수의 값 대입
결론적으로 다음과 같은 SQL이 실행되는 것과 같음
SELECT mem_name, height FROM member ORDER BY height LIMIT 3;
🚀 데이터 형 변환
💡 함수를 이용한 명시적인 변환
CAST(), CONVERT() 함수 사용
형식만 다를 뿐 동일한 기능 수행
CAST ( 값 AS 데이터_형식 [ (길이) ] )
CONVERT ( 값, 데이터_형식 [ (길이) ] )
👀 CAST(), CONVERT() 함수 안에 올 수 있는 데이터 형식
CHAR , SIGNED , UNSIGNED , DATE , TIME , DATETIME 등
* SIGNED : 부호가 있는 정수
* UNSIGNED : 부호가 없는 정수
SELECT AVG(price) AS '평균 가격' FROM buy; -- 142.9167
SELECT CAST(AVG(price) AS SIGNED) '평균 가격' FROM buy; -- 143
SELECT CONVERT(AVG(price), SIGNED) '평균 가격' FROM buy; -- 143
👀 CONCAT()
CAST(), CONVERT() 함수는 SQL의 결과를 원하는 형태로 표현할 때에도 사용 가능(CONCAT() 함수와 함께!)
CONCAT() 함수는 문자를 이어주는 역할
SELECT num, CONCAT(CAST(price AS CHAR),
'X', CAST(amount AS CHAR), '=') '가격X수량',
price * amount '구매액'
FROM buy;
[실행결과]
num
가격X수량
구매액
1
30X2=
60
2
1000X1=
1000
3
200X1=
200
4
200X5=
1000
5
50X3=
150
6
80X10=
800
7
15X5=
75
8
15X2=
30
9
50X1=
50
10
30X1=
30
11
15X1=
15
12
30X4=
120
💡 암시적인 변환
함수사용 없이 자연스럽게 형이 변환되는 것
아래 예시의 경우, 문자끼리 더할 수 없으므로 자동으로 숫자 100, 200으로 변환되어 덧셈 수행
SELECT '100' + '200' ;
>>> 300
🔵 만약 문자 ‘100’, ‘200’이 합쳐진 ‘100200’을 만들고 싶다면? 👉 CONCAT() 함수 이용
SELECT CONCAT('100', '200') ;
>>> 100200
🔵 숫자와 문자를 CONCAT() 함수로 연결한다면?
SELECT CONCAT(100, '200') ;
SELECT 100 + '200';
>>> 100200
300
CONCAT() 함수로 숫자와 문자 연결시, 숫자 100이 문자 ‘100’으로 변환되어 연결
CONCAT() 함수를 사용하지 않고 숫자 100과 문자 ‘200’을 더한 경우, 뒤의 문자가 숫자 200으로 자동 변환되어 300 출력
Leave a comment