
데이터 형식을 설정해야 함.데이터 형식에는 크게 숫자형, 문자형, 날짜형이 있음.데이터 형식이 존재하는 이유는 실제로 저장될 데이터의 형태가 다양하기 때문.데이터 형식을 지정함으로써 효율적으로 저장할 수 있음.| 데이터형식 | 바이트 수 | 숫자 범위 |
|---|---|---|
| TINYINT | 1 | -128 ~ 127 |
| SMALLINT | 2 | -32,768 ~ 32,767 |
| INT | 4 | 약 -21억 ~ +21억 |
| BIGINT | 8 | dir -900경 ~ +900경 |
Ex) 평균 키를 저장할 때TINYINT를 고려할 수 있지만 최대값이 +127임.UNSIGNED 예약어를 사용할 수 있음.TINYINT와 TINYINT UNSIGNED 모두 1바이트.TINYINT : -128 ~ +127TINYINT UNSIGNED : 0 ~ 255TINYINT UNSIGNED를 사용하면 효율적으로 저장할 수 있음.Out of range 에러 발생.| 데이터 형식 | 바이트 수 |
|---|---|
| CHAR(개수) | 1 ~ 255 |
| VARCHAR(개수) | 1 ~ 16383 |
CHAR는 문자를 의미하는 Character의 약자.VARCHAR(Variable Character)는 가변길이 문자열.VARCHAR가 CHAR보다 공간을 효율적으로 운영할 수 있지만, MySQL 내부적으로 성능면에서는 CHAR로 설정하는 것이 조금 더 좋음.CHAR는 글자의 개수가 고정된 경우, VARCHAR는 글자의 개수가 변동될 경우에 사용.Ex) 전화번호는 정수형 or 문자형?0을 붙여야 되는 경우도 있는데 정수형으로 지정하면 0이 사라짐.문자형으로 지정하는 것이 좋음.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 |
LONGTEXT 및 LONGBLOB로 설정하면 각 데이터는 최대 4GB까지 입력할 수 있음.TEXT는 소설이나 영화 대본과 같은 내용을 저장할 때 필요한 데이터 형식.BLOB는 Binary Long Object의 약자. 글자가 아닌 이미지, 동영상 등의 데이터라고 생각.이진(Binary) 데이터라고 부름.BLOB or LONGBLOB로 데이터 형식을 지정.실수형은 소수점이 있는 숫자를 저장할 때 사용함.| 데이터 형식 | 바이트 수 | 설명 |
|---|---|---|
| FLOAT | 4 | 소수점 아래 7자리까지 표현. |
| DOUBLE | 8 | 소수점 아래 15자리까지 표현. |
FLOAT와 DOUBLE은 거의 비슷함.| 데이터 형식 | 바이트 수 | 설명 |
|---|---|---|
| DATE | 3 | 날짜만 저장. YYYY-MM-DD 형식. |
| TIME | 3 | 시간만 저장. HH:MM:SS 형식. |
| DATETIME | 8 | 날짜 및 시간을 저장. YYYY-MM-DD HH:MM:SS 형식. |
DATE는 날짜만, TIME은 시간만 저장하고, DATETIME은 날짜와 시간 둘 다 저장함.작은따옴표로 묶어줘야 함.SQL도 다른 일반적인 프로그래밍 언어처럼 변수를 선언하고 사용할 수 있음.SET @변수이름 = 변수의 값;SELECT @변수이름;MySQL Workbench를 재시작할 때까지는 유지되고, 종료하면 없어짐.SELECT문에서 행의 개수를 제한하는 LIMIT와 변수는 함께 사용하지 못함.SET @count = 3;
SELECT .... LIMIT @count;
이를 해결하는 것이 PREPARE와 EXECUTE.
PREPARE는 실행하지 않고 SQL문만 준비해놓고 EXECUTE에서 실행하는 방식.
SET @count = 3;
PREPARE mySQL FROM 'SELECT .... LIMIT ?';
EXECUTE mySQL USING @count;
PREPARE는 'SELECT ~~ LIMIT ?'문을 실행하지 않고 mySQL이라는 이름으로 준비만 해놓음.
?는 '현재는 모르지만 나중에 채워짐 정도'로 이해.EXECUTE로 mySQL에 저장된 SELECT문을 실행할 때 USING으로 ?에 @count변수의 값을 대입하는 것.
문자형 -> 정수형 or 정수형 -> 문자형으로 바꾸는 것을 데이터의 형 변환(type conversion)이라고 함.명시적인 변환(explicit conversion)암시적인 변환(implicit conversion)CAST(), CONVERT().CAST (값 AS 데이터 형식 [ (길이) ]
CONVERT (값, 데이터 형식 [ (길이) ]
CAST()나 CONVERT() 함수 안에 올 수 있는 데이터 형식은 CHAR, SIGNED, UNSIGNED, DATE, TIME, DATETIME 등.CAST() or CONVERT()함수를 사용하지 않고도 자연스럽게 형이 변환되는 것.SELECT '100' + '200';
실행결과
300
SELECT CONCAT('100', '200');
실행결과
100200
CONCAT() 함수는 문자를 이어주는 역할을 함.SELECT CONCAT(100, '200');
SELECT 100 + '200';
실행결과
100200
300
숫자와 문자를 CONCAT()함수로 연결
CONCAT()함수를 사용하지 않고 숫자 100과 문자 '200'을 더하면 뒤의 문자가 숫자 200으로 자동 변환되어 300이 출력됨.
숫자와 문자를 연산할 때 CONCAT()을 사용하면 숫자는 문자로 변하고, 더하기만 사용하면 문자가 숫자로 변환 후 연산됨.