Mysql&DBeaver

DBeaver)SQL로 테이블 만들기 & 데이터 타입

연습노트 2024. 8. 13. 23:08

오늘은 테이블 만드는 법 & 데이터 타입을 알아볼텐데 

그냥하면 재미가 없으니까 여러분들 이마트에서 일하는 개발자라고 가정하고  

이마트에서 파는 상품데이터를 db에 저장해봅시다. 

 

 

관계형 데이터베이스를 사용하면 데이터를 어떻게 보관하냐면 

 

 

 

님들 그림 좋아하니까 그림으로 봅시다. 

database라는걸 만들고 그 안에 여러개의 table을 보관해둡니다. 

table 안에 원하는 데이터 엑셀처럼 작성하면 끝임

비유하자면 database는 폴더, table은 파일입니다. 

database는 자주 만들진 않고 서비스마다 1개씩 만들면 됩니다. 

 

 

 

 

 

간단히 database & table 만들어보기

 

 1. 일단 MySQL 서버를 켜놓읍시다.

저번시간처럼 MySQL Workbench 켜서 Local Instance 어쩌구 실행해놓으면 됩니다.

실행이 안되면 윈도우의 경우 시작 - 검색 - '서비스' 검색 후 실행 - MySQL 항목 찾아서 우클릭해서 실행해봅시다. 

 

 

 

 

2. Database를 하나 만들어봅시다.

저번시간 강의처럼 DBeaver 켜서 방금 열어둔 DB에 접속하면 되고  

 

 

좌측에 있는 Databases 에 우클릭해서 Create New Database 하면 됩니다. 

그럼 Database라는거 하나 생성가능한데 하나 만들어봅시다.

마트상품데이터 보관해볼거라 저는 mart라고 작명했습니다. 

 

 

 

 

굳이 MySQL Workbench 에서 하고 싶으면 create schema 누르면 됩니다.

거기선 database를 schema라고 부릅니다. 

 

 

 

 

 

3. table을 만들어봅시다.

 

 

Tables 메뉴에서 우클릭해서 Create New Table 누르면 됩니다.

테이블은 비유하자면 파일이랬죠? 이제 그 파일에 마음대로 데이터 저장할 수 있는 것임 

왜 저장이 안되냐고요? 

column도 명시해줘야 테이블을 만들 수 있어서 그렇습니다. 

 

 

 

 

4. 데이터 기록하려면 column부터 만들어야함 

table 만들 때 어떤 데이터를 저장해둘지 column을 먼저 정해둬야합니다. 

column이 뭐냐면 그냥 table의 세로줄을 뜻합니다. 

 

번호 상품명 카테고리 가격
1 셔츠 5000
2 의자 가구 7000

 

▲ 예를 들어 이런 식으로 데이터를 보관하고 싶으면 1. 번호 2. 상품명 3. 카테고리 4. 가격을 저장하겠다고 column을 만들어두면 됩니다. 

방금 만든 product table에 우클릭해서 create - column 눌러보셈 

 

 

 

 

▲ 그리고 이런 식으로 컬럼을 미리 만들면 됩니다.

Data Type 부분은 저렇게 설정해두면 됩니다. 

그리고 저장하면 테이블 생성 끝 

 

 

 

 

 

 

 

Data type은 여러가지가 있는데

 

column을 만들 때 data type을 명시하게 되어있는데 

data type은 데이터의 종류라는 뜻입니다. 

문자, 숫자, 소수, 시간, 참거짓여부 등 여러 종류가 있습니다. 

 

 

data type 저장가능한양 특징
CHAR 0~255자 CHAR(숫자)로 최대용량 지정가능
VARCHAR 0~65535자 VARCHAR(숫자)로 최대용량 지정가능
TEXT 0~65535자  
TINYTEXT 0~255자  
MEDIUMTEXT 0~1600만자  
LONGTEXT 0~42억자  

 

문자를 저장하고 싶으면 이것 중에 고르면 됩니다.

VARCHAR를 가장 많이 쓰니까 문자 저장하고 싶으면 대충 그거 선택해서 쓰면 됩니다.

가끔 블로그 글이라든지 긴 글을 저장하고 싶으면 MEDIUMTEXT 이런거 쓰는 경우가 있습니다.  (BLOB 형태로 저장됩니다)

 

(참고1)

VARCHAR(300) 이렇게 해놓고 나중에 10자만 저장한다고 해도 300자만큼 하드용량을 차지하는게 아닙니다.

실제 넣은 10자 + 1byte 만큼 용량을 차지합니다. 

(글자가 256자 이상이면 + 1byte 말고 + 2byte 입니다)

 

(참고2)

CHAR(10) 이렇게 해놓으면 나중에 10자만 저장하면 딱 10자만큼 용량을 차지합니다. 

다만 5자만 저장해도 10자만큼 용량을 차지합니다. 

항상 고정된 크기의 글자가 필요한 경우 CHAR쓰는게 성능상 이점이 있을 수 있습니다.

근데 그런 경우는 매우 드물고 체감도 별로 되진 않습니다. 

 

 

 

 

data type 저장가능한양 특징
SMALLINT -32768 ~ 32767  
MEDIUMINT -838만 ~ 838만  
INT -21억 ~ 21억  
BIGINT -900경 ~ 900경  
FLOAT -10^38 ~ 10^38 소수점 7자리까지 저장가능 (약간의 오차발생함)
DOUBLE -10^308 ~ 10^308 소수점 14자리까지 저장가능 (약간의 오차발생함)
DECIMAL 소수점 30자리 포함 최대 65자리  오차없이 소수점 저장가능

 

숫자를 저장하고 싶으면 이것 중에 고르면 됩니다.

언제나 예상하는 숫자보다 더 큰 숫자가 들어올 수 있으니 잘 생각해서 고릅시다. 

FLOAT, DOUBLE, DECIMAL은 소수점이 들어있는 숫자를 저장가능합니다.

다만 FLOAT, DOUBLE은 성능은 괜찮으나 정확도가 낮을 수 있습니다. 

 

 

(참고1) 양의 숫자만 저장하고 싶으면 column만들 때 unsigned 옵션을 켜면 됩니다.

그럼 SMALLINT의 경우 0 ~ 65535 까지 저장가능합니다. 

 

(참고2) 넣는 숫자가 커진다고 DB용량을 더 차지하고 그런거 아닙니다. 

INT로 만들어놨으면 데이터 1개 당 무조건 4byte를 차지합니다.

SMALLINT는 2byte, BIGINT는 8byte임 

 

(참고3) 예전엔 INT(4) 이렇게 출력할 숫자 자릿수를 미리 만들고 그랬습니다.

요즘은 안씁니다. 

 

 

 

 

 

 

data type 저장가능한양 특징
DATE 1000년 ~ 9999년 YYYY-MM-DD 형식으로 날짜저장가능
TIME -839 ~ +838시간 HH:MM:SS 형식으로 시간의 양 저장가능
DATETIME 1000년 ~ 9999년 YYYY-MM-DD HH:MM:SS 형식으로 날짜 & 시간 저장가능
TIMESTAMP 1970년 ~ 2038년 YYYY-MM-DD HH:MM:SS 형식으로 날짜 & 시간 저장가능한데 보통안씀

 

날짜나 시간도 저장할 수 있습니다. 보통 DATETIME 쓰면 됩니다.

TIMESTAMP도 비슷한데 MySQL에선 2038년 까지 밖에 저장이 안되어서 보통 안씁니다.

현재 DB시간 같은거 기록할 때 간혹 쓰긴 합니다. 

 

 

 

이거 말고도 영상, 사진같은 바이너리 데이터는 BLOB,

JSON 형식은 JSON, 

참거짓 여부는 BOOLEAN 이런거 사용합니다.

자주 안쓰니 이런 것들이 있다고만 알아둡시다. 

 

 

 

MySQL, Oracle, Postgresql 등 DBMS 종류마다 저장할 수 있는 타입이 다릅니다.

예를 들면 Postgresql은 확장기능 설치하면 유저 GPS 좌표정보도 저장가능합니다. 그래서 당근마켓 이런데서 이용하고 있습니다. 

물론 MySQL에서도 대충 숫자나 문자로 바꾸면 저장가능