[MySQL] 데이터 형식

🚀 데이터 형식

💡 정수형

데이터 형식  바이트 수  숫자 범위
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 출력



Categories:

Updated:

Leave a comment