Develop

MySQL 형식 정하기 : schema 스키마

챔새 2017. 8. 20. 20:33
반응형

// 스터디노트




관계형데이터베이스인 MySQL은

Table - 표 구조를 기본으로 한 데이터 구조를 갖는다


흔히 쉽게 접할 수 있는

'엑셀' 프로그램에 비유되고는 하는데


행과 열에 각각의 기준을 부여하고,

Cell에 입력된 개별 데이터를

분류/재편집 하는 과정을 쿼리문이 담당하게 된다

(필터와 정렬의 기능과 비슷하다)




예시 ) table : user


user_num

 name

 age

 sex

purchase

 1054

 김철수

 26

 남

 105000

 1055

 박미영

 34

 여

 86000

 1056

 이미자

 21

 여

 354500





엑셀에서는 데이터를 입력하고

표시형식 설정을 통해 데이터 형식을 지정하고 있다 (후처리)


하지만 MySQL 에서는

반대로 데이터 형식(타입)을 먼저 설정한 후 (선처리)

개별 데이터를 입력하는 방식으로 진행된다


** 데이터형식을 정하는 일련의 행위 및 종류를 schema (스키마) 라고 한다





테이블의 데이터 레이아웃 만들기


CREATE TABLE `user` (

`user_number` smallint NOT NULL ,

`name` char(4) NOT NULL ,

`age` tinyint NOT NULL ,

`sex` enum('남','여') NOT NULL ,

`purchase` int NOT NULL ,

PRIMARY KEY (`user_num`)

);




명령를 통해 'user' 라는 테이블 만드는데,

분류하고자 하는 항목과

그에 따른 데이터 형식(스키마)를 먼저 설정해준다



** TIP >> 테이블명, 변수명 등은 '(작은따옴표) 가 아닌 `(악센트, ~위치) 로 감싸주어야한다



스키마의 종류는 


1) 문자의 길이

2) 숫자의 길이

3) 날짜시간형식

4) 기타


로 나누어 볼 수 있다.



 분류

 타입명

 상세

문자형식

 TINYTEXT

 최대 255 문자길이

 TEXT

 최대 65535 문자길이

 BLOB

 최대 65535 문자길이

 MEDIUMTEXT

 최대 16777215 문자길이

 MEDIUMBLOB

 최대 16777215 문자길이

 LONGTEXT

 최대 4294967295 문자길이

 LONGBLOB

 최대 4294967295 문자길이

 고정값을 지니거나, 지닐 수 있는

문자형식

 CHAR( )

 0 to 255 고정문자 길이

 VARCHAR( )

 0~65535 가변 문자 길이

 숫자형식

 TINYINT( )

 -128 ~ 127 / (unsigned) 0 ~ 255 정수

 SMALLINT( )

 -32768 ~ 32767 / 0 ~ 65535 정수

 MEDIUMINT( )

 -8388608 ~ 8388607 / 0 ~ 16777215 정수

 INT( )

 -2147483648 ~ 2147483647 / 
 0 ~ 4294967295 정수

 BIGINT( )

 -9223372036854775808 ~  9223372036854775807 /
 0 ~ 18446744073709551615 정수

 부동 소수점 데이터 형식

 FLOAT()

 0~23 사이의 소수 자리값 (4bit)

 DOUBLE(M,D) / REAL (M,D)

 M = 전체 자리수

 D = 소수 이하 자리수

 (8bit)

 고정 소수점 테이터 형식

 DECIMAL(M,D)

 고정 소수점

 날짜시간 형식

 DATE

 YYYY-MM-DD

 DATETIME

 YYYY-MM-DD HH:MM:SS

 TIMESTAMP(M)

 YYYYMMDDHHMMSS
 M 값에 따라 표시 형식을 달리 할 수 있음

 TIME

 HH:MM:SS

 YEAR( )

 2/4 값을 통해 연도 형식을 표시할 수 있음

기타

 ENUM (' ', ' ', ... )

 지정된 값 또는 NULL 만 저장

 SET (' ', ' ', ... )

 하나 이상의 값 또는 NULL 저장


이 외에도 추가 형식이 있지만, 주요하게 쓰이는 것들은 대부분 위 표에 속해 있다






궁금증 1) TEXT vs BLOB


최대값을 지정하는 문자형식중

TEXT 와 BLOB 가 같은 상세설명을 갖고 있는걸 알아차렸으려나?


그렇다면 왜 이 둘을 나누어 놓았을까?



데이터형식을 '문자형식' 이라고 구분지어두었으나

사실 '문자' 로 대변되는 데이터는 '숫자' 이외의 데이터들을 일컫고 있다.


때문에 실제로 글자인 데이터 타입은 TEXT로,

( TEXT : non-binary string - character set )

이외의 데이터 타입은 BLOB로 저장한다.

( BLOB : binarty string - collation ; byte형 숫자값으로 비교 정렬됨 )



- BLOB 의 장단점

1) 장점 : 다양한 형식의 파일을 저장할 수 있다

2) 단점 : 내용 검색이 불가하다



좀 더 자세히 알아보고 싶다면? 


MySQL 공식사이트 :: 

11.4.3 The BLOB and TEXT Types

https://dev.mysql.com/doc/refman/5.7/en/blob.html


궁금증 2) CHAR vs VACHAR


고정값을 지닐 수 있는

CHA 와 VACHA의 가장 큰 차이점은

CHA는 고정값 지정시 고정값보다 작은 데이터를 입력하더라도 고정값 만큼 자리를 차지하며

VACHA는 고정값보다 작은 데이터를 입력할 경우, 입력한 데이터만큼의 값을 갖는다


때문에 데이터가 차지하는 용량을 고려한다면 VACHA가 유리하지만

CHA는 고정문자의 특성으로 효율적 검색이 가능하다 




궁금증 3) TEXT/BLOB vs CHAR/VACHAR


- T/B 에서는 index의 prefix 길이를 설정해야한다 (C/V는 옵션 개념)

- T/B 는 default 값을 가질 수 없다 (but GROUP BY, ORDER BY 등의 명령어를 더해 고정 가능하다)

- T/B 의 값은 길게 사용이 가능하기 때문에 제약사항이 있다.


- C/V의 장점

크기가 작아 index를 활용한 검색에 용이하다

 



궁금증 4) 고정소수점 vs 부동소수점


컴퓨터에서 실수를 표시하는 방법으로

소수점의 위치의 고정여부에 따라 고정소수점 / 부동소수점으로 나뉜다

부동소수점의 경우 가수와 지수를 활용하여 실수를 표시한다. 



- 10bit 로 표현하기 


고정소수점 => 0~1024까지 표현 가능 (고정)

소수점이 고정되어 있어 표현의 범위를 크게 벗어날 수 없음


부동소수점 =>

할당량의 일부는 자리수를, 일부는 숫자를 표현하여

더욱 다양한 표현이 가능해짐

+ 값이 커질 수록 미세한 정보가 누락되지만, 값이 작아질 수록 작은 정보까지 처리 가능함


예) 

0.0000001 (고정 소수점)

8*8=64bit

0.1*10^(-6) (부동 소수점)

16bit+16bit=32bit






반응형

'Develop' 카테고리의 다른 글

초보를 위한 python의 실행, window powershell  (2) 2017.10.11
설치해보자 Python  (0) 2017.08.30
설치해보자 MySQL  (0) 2017.08.14
데이터베이스란?  (0) 2017.08.14
설치해보자 node.js  (0) 2017.08.11