일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- FetchType
- 동적sql
- 데코레이터
- 낙관적락
- eager
- 일대다
- 이진탐색
- 다대다
- execute
- 연관관계
- 비관적락
- JPQL
- fetch
- 지연로딩
- 스프링 폼
- BOJ
- exclusive lock
- PS
- 다대일
- SQL프로그래밍
- dfs
- shared lock
- querydsl
- 유니크제약조건
- CHECK OPTION
- 백트래킹
- 힙
- 스토어드 프로시저
- 연결리스트
- 즉시로딩
- Today
- Total
흰 스타렉스에서 내가 내리지
SQL 고급 문법 - MySQL의 데이터 형식 본문
정수형
데이터 형식 | 바이트 수 | 숫자 범위 |
TINYINT | 1 | -128 ~ 127 |
SMALLINT | 2 | -32,768 ~ 32,767 |
INT | 4 | 약 -21억 ~ +21억 |
BIGINT | 8 | 약 -900경 ~ +900경 |
0부터 시작되는 UNSIGNED 예약어를 사용할 수 있다.
TINYINT UNSIGNED 를 사용하면 0~255의 숫자 범위를 사용할 수 있다.
그러면 사람의 키를 저장하기 좋은 숫자범위가 되겠다.
마찬가지로 SMALLINT UNSIGNED는 0부터 65535까지 저장된다.
문자형
데이터 형식 | 바이트 수 |
CHAR (개수) | 1 ~ 255 |
VARCHAR (개수) | 1 ~ 16383 |
CHAR는 고정길이 문자형이다. 즉, 자릿수가 고정되어 있다.
예를 들어, CHAR(10)에 '가나다' 3글자만 저장해도 10자리를 모두 확보한 후에 앞에 3자리를 사용하고 뒤의 7자리는 낭비한다.
이와 달리 VARCHAR (Variable Character)는 가변길이 문자형으로, VARCHAR(10)에 '가나다' 3글자를 저장할 경우 3자리만 사용한다.
VARCHAR가 CHAR보다 공간을 효율적으로 운영할 수 있지만, MySQL 내부적으로 성능(빠른 속도)면에서는 CHAR로 설정하는 것이 조금 더 좋다.
대량의 데이터 형식
CHAR는 최대 255자까지, VARCHAR는 최대 16383자 까지 지정이 가능하다.
더 큰 데이터를 저장하려면,
데이터 형식 | 바이트 수 | |
TEXT 형식 | TEXT | 1 ~ 65,535 |
LONGTEXT | 1 ~ 4,294,967,295 | |
BLOB 형식 | BLOB | 1 ~ 65,535 |
LONGBLOB | 1 ~ 4,294,967,295 |
BLOB은 Binary Long Object 의 약자로 글자가 아닌 이미지, 동영상 등의 데이터다.
LONGTEXT 및 LONGBLOB 으로 설정하면 각 데이터는 최대 4GB까지 입력할 수 있다.
실수형
데이터 형식 | 바이트 수 | 설명 |
FLOAT | 4 | 소수점 아래 7자리까지 표현 |
DOUBLE | 8 | 소수점 아래 15자리까지 표현 |
보통 FLOAT면 충분하다.
날짜형
데이터 형식 | 바이트 수 | 설명 |
DATE | 3 | 날짜만 저장. YYYY-MM-DD |
TIME | 3 | 시간만 저장. HH:MM:SS |
DATETIME | 8 | 날짜 및 시간. YYYY-MM-DD HH:MM:SS |
변수의 사용 그리고 PREPARE와 EXECUTE
SET @변수이름 = 변수의 값; -- 변수의 선언 및 값 대입
SELECT @변수이름; -- 변수의 값 출력
변수는 MySQL 워크벤치를 재시작할 때 까지는 유지되지만, 종료하면 없어진다.
그러므로 임시로 사용한다고 생각할 것.
행의 개수를 제한하는 LIMIT에도 변수를 사용해 보자.
이 SQL은 SELECT문에서 오류가 발생한다.
LIMIT에는 변수를 사용할 수 없기 때문에 문법상 오류이다.
이를 해결하는 것이 PREPARE와 EXECUTE이다.
1 : @count 변수에 3을 대입한다.
2 : PREPARE는 'SELECT ~~ LIMIT ?' 문을 실행하지 않고 mySQL이라는 이름으로 준비만 해 놓는다. ?는 '현재는 모르지만 나중에 채워짐' 정도로 이해하면 된다.
3: EXECUTE로 mySQL에 저장된 SELECT 문을 실행할 때, USING으로 물음표(?)에 @count 변수의 값을 대입한다.
결론 : LIMIT에는 변수를 사용하지 못한다. 대신 PREPARE, EXECUTE를 사용할 수 있다.
데이터 형 변환
문자형을 정수형으로 바꾸거나, 반대로 정수형을 문자형으로 바꾸는 것을 데이터의 형 변환(type conversion)이라고 부른다. 형 변환에는 직접 함수를 사용해서 변환하는 명시적인 변환(explicit conversion)과 별도의 지시 없이 자연스럽게 변환되는 암시적인 변환(implicit conversion)이 있다.
함수를 이용한 명식적인 변환
데이터 형식을 변환하는 함수는 CAST(), CONVERT()이다.
CAST()와 CONVERT()는 형식만 다를 뿐 기능은 동일하다.
CAST ( 값 AS 데이터_형식 [ (길이) ] )
CONVERT ( 값, 데이터_형식 [ (길이) ] )
예시)
가격은 실수보다 정수로 표현하는 것이 보기 좋으므로, 형 변환 함수를 사용하자.
SIGNED는 SIGNED INTEGER, UNSIGNED 는 UNSIGNED INTEGER라고 써도 된다.
날짜형으로 변환하기
SQL의 결과를 원하는 형태로 표현할 때도 사용
가격(price)와 수량(amount)은 정수지만, CAST() 함수를 통해 문자로 바꿨다.
CONCAT() 함수는 문자를 이어주는 역할을 하며, 여기서는 '30X2='과 같은 형태의 문자로 만들어서 출력.
암시적인 변환
문자 '100'과 '200'을 더하면?
만약에 '100200'의 결과를 얻고 싶다면?
'SQL' 카테고리의 다른 글
SQL 프로그래밍 - IF, CASE, WHILE (0) | 2022.08.03 |
---|---|
SQL 고급 문법 - 두 테이블을 묶는 조인(내부,외부,상호,자체) (0) | 2022.07.31 |
데이터 변경을 위한 SQL 문 (CRUD) (0) | 2022.07.29 |
SQL 문법 기초 2 - SELECT 관련 (0) | 2022.07.27 |
SQL 문법 기초 - SELECT 관련 (0) | 2022.07.24 |