MySQL - 테이블 생성 알아보기 - CREATE TABLE
MySQL - 테이블 생성 알아보기
이번 포스팅에서는 테이블 생성 방법에 대해서 알아보도록 하겠습니다.
이전글 :
DataBases(데이터베이스) 의 등장배경과 사용하는 이유 - https://server-talk.tistory.com/275
DataBases(데이터베이스) 구성 알아보기 - https://server-talk.tistory.com/276
DataBases(데이터베이스) - 관계형 데이터베이스 알아보기 - https://server-talk.tistory.com/278
MySQL - 테이블 만들기 |
테이블 생성하기에 앞서 먼저 알아보아야 될것이 스키마 입니다
스키마는 데이터베이스의 테이블에 저장될 데이터의 구조와 형식을 정의하는 것입니다
즉, 스키마는 데이터의 설계도라고 합니다.
그래서, 데이터베이스에 데이터를 아무렇게 넣는것이 아닌 테이블에 어떠한 형식으로 데이터들이 삽입되고 저장될것인지를 미리 사전에 설계해야됩니다
위 그림은 회원정보 데이터를 가지고 있는 테이블을 간단하게 만들어 보았으며, 이제 테이블을 만들어 보도록 하겠습니다
1. member_table - 테이블명
CREATE TABLE member_table (
seq INT NOT NULL AUTO_INCREMENT,
mb_id VARCHAR(20),
mb_pw VARCHAR(20),
address VARCHAR(50),
mb_tell VARCHAR(50),
PRIMARY KEY(seq)
) ENGINE=MYISAM CHARSET=utf8;
1번째 줄은 테이블 생성 부분입니다
CREATE TABLE 은 기본명령어이고, 사용할 테이블명을 입력하고 ( ) - 소괄호 안에 사용하게될 필드명을 입력합니다.
2. seq 컬럼 - 용도 : 자동인덱스 증가
CREATE TABLE member_table (
seq INT NOT NULL AUTO_INCREMENT,
mb_id VARCHAR(20),
mb_pw VARCHAR(100),
address VARCHAR(100),
mb_tell VARCHAR(20),
PRIMARY KEY(seq)
) ENGINE= MYISAM CHARSET=utf8;
2번째줄 부터는 컬럼을 지정하는 부분입니다
seq로 컬럼의 이름을 입력하고 데이터 타입은 INT NOT NULL 로 중복이 불가능한 숫자형하고 AUTO_INCREMENT 로 자동 증가를 설정합니다.
3. mb_id 컬럼 - 용도 : 회원ID
CREATE TABLE member_table (
seq INT NOT NULL AUTO_INCREMENT,
mb_id VARCHAR(20),
mb_pw VARCHAR(100),
address VARCHAR(100),
mb_tell VARCHAR(20),
PRIMARY KEY(seq)
) ENGINE=MYISAM CHARSET=utf8;
3번째줄은 mb_id 로 컬럼 이름을 추가하고 데이터 타입은 VARCHAR(20)으로 지정 합니다.
4. mb_pw 컬럼 - 용도 : 패스워드
CREATE TABLE member_table (
seq INT NOT NULL AUTO_INCREMENT,
mb_id VARCHAR(20),
mb_pw VARCHAR(100),
address VARCHAR(100),
mb_tell VARCHAR(20),
PRIMARY KEY(seq)
) ENGINE=MYISAM CHARSET=utf8;
4번째줄은 mb_pw 로 컬럼 이름을 추가하고 데이터 타입은 VARCHAR(100)으로 지정 합니다.
5. address 컬럼 - 용도 : 주소
CREATE TABLE member_table (
seq INT NOT NULL AUTO_INCREMENT,
mb_id VARCHAR(20),
mb_pw VARCHAR(100),
address VARCHAR(100),
mb_tell VARCHAR(20),
PRIMARY KEY(seq)
) ENGINE=MYISAM CHARSET=utf8;
5번째줄은 address로 컬럼 이름을 추가하고 데이터 타입은 VARCHAR(100)으로 지정합니다.
6. mb_tell 컬럼 - 용도 : 연락처
CREATE TABLE member_table (
seq INT NOT NULL AUTO_INCREMENT,
mb_id VARCHAR(20),
mb_pw VARCHAR(100),
address VARCHAR(100),
mb_tell VARCHAR(20),
PRIMARY KEY(seq)
) ENGINE=MYISAM CHARSET=utf8;
6번째줄은 mb_tell 로 컬럼 이름을 추가하고 데이터 타입은 VARCHAR(100)으로 지정합니다.
7. seq - 기본키 지정
CREATE TABLE member_table (
seq INT NOT NULL AUTO_INCREMENT,
mb_id VARCHAR(20),
mb_pw VARCHAR(100),
address VARCHAR(100),
mb_tell VARCHAR(20),
PRIMARY KEY(seq)
) ENGINE=MYISAM CHARSET=utf8;
7번째줄은 seq 를 기본키로 지정하여 중복이 불가능하게 지정 합니다.
8. ENGINE, CHARSET 설정
CREATE TABLE member_table (
seq INT NOT NULL AUTO_INCREMENT,
mb_id VARCHAR(20),
mb_pw VARCHAR(100),
address VARCHAR(100),
mb_tell VARCHAR(20),
PRIMARY KEY(seq)
) ENGINE=MYISAM CHARSET=utf8;
8번째줄은 테이블의 ENGINE 과 CHARSET을 지정하는 부분입니다
ENGINE 은 MYISAM으로 지정하였고, CHARSET 은 utf-8로 지정하여 가변폭 방식의 인코딩으로 설정했습니다.
MySQL - 데이터 타입(Data Type) - 자료형 |
데이터베이스의 테이블 컬럼들을 정의할때 컬럼이 어떠한 형식을 가지고 있고, 어떠한 제약을 가지고 있어야 되는것이 데이터 타입(Data Type) 입니다
데이터 자료형은 크게 문자형, 숫자형, 날짜형, 선택형으로 나누어 집니다
1. 문자형 타입
보편적으로 많이 쓰이는것은 CHAR(), VARCHAR(), TEXT 입니다
데이터 타입 |
범위 |
CHAR() |
0 ~ 255 고정문자 길이 |
VARCHAR() |
0 ~ 65535 가변 문자 길이 |
INNYTEXT |
0 ~ 255 문자길이 |
TEXT |
0 ~ 65535 문자길이 |
BLOB |
0 ~ 65535 문자길이 |
MEDIUMTEXT |
0 ~ 16777215 문자길이 |
MEDIUMBLOB |
0 ~ 16777215 문자길이 |
LONGTEXT |
0 ~ 4294967295 문자길이 |
LONGBLOB |
0 ~ 4294967295 문자길이 |
CHAR() - 고정 문자일때 사용됩니다
- char(10)을 지정하면 10개(10Byte)의 데이터를 입력할 수 있습니다.
- (char(10) 지정후 데이터를 5Byte를 입력해도 데이터 공간은 10Byte로 자료형 크기만큼 데이터 공간을 차지하게 됩니다)
VARCHAR() - 가변 문자일대 사용됩니다
- VARCHAR(10)을 지정하면 10개(10Byte)의 데이터를 입력할 수 있습니다.
- (varchar(10) 지정후 데이터를 5Byte를 입력시 데이터 공간은 5Byte로 데이터 크기만큼 차지하게 됩니다)
CHAR(), VARCHAR() 차이점
- char은 검색이나 성능이 뛰어나 정형화 일때 사용되며, varchar는 가변적일때 사용됩니다.
TEXT
- text는 자연어 검색이 가능하게 하는것으로 용량이 많이 사용하게 될때 사용됩니다.
용도 :
CHAR - 전화번호 같이 정형화 되어 있는것으로 사용됩니다
VARCHAR - 게시판 제목 같이 가변적일때 사용됩니다
TEXT - 게시판의 내용 같이 내용이 많을때 사용됩니다
2. 숫자형 타입
데이터 타입 |
크기 |
최소값 |
최대값 |
INT |
4Byte |
-2147483648 ~ 2147483647 |
0 ~ 4294967295 |
TINYNT |
1Byte |
-128 ~ 127 |
0 ~ 255 정수형, UNSIGNED |
FLOAT |
4Byte |
-3.402823466×1038 ~ 3.402823466×1038 |
|
DOUBLE |
8Byte |
-1.7976931348623157×10308 ~ 1.7976931348623157×10308 |
숫자형은 사용할수 있는 범위가 정해져 잇으며, 부호가 있고 없고에 따라서 범위가 틀려지게되니 범위에 맞게 사용하셔야 합니다.
3. 날짜형 타입
데이터 타입 |
크기 |
최소값 |
DATE |
3Byte |
YYYY-MM-DD |
DATETIME |
8Byte |
YYYY-MM-DD HH:MM:SS |
TIMESTAMP |
4Byte |
YYYYMMDDHHMMSS |
TIME |
3Byte |
HH:MM:SS |
|
표기방법 |
출력결과 |
년도 |
Y(4자리) |
2017, 2018, 2019, ... |
y(2자리) |
17, 18, 19, ... |
|
월 |
M |
Janeary, February, March, ... |
c |
1, 2, 3, ... |
|
b |
Jan, Feb, Mar, ... |
|
요일 |
W |
Sunday, Monday, ... |
a |
Sun, Tue, ... |
|
시 |
H |
19, 20, 21, ... |
h |
07, 08, 09, ... | |
초 |
s |
51, 52, 53, ... |
날짜형은 Y(년도), M(월), D(일), S(초) 로 포멧형식에 따라 표기방식이 달라집니다.
DATE - 날짜정보
포멧형식 : YYYY-MM-DD
ex) : 2019-09-01
- 년, 월 일 형태로 표현할때 사용됩니다.
DATETIME - 날짜/시간 정보
포멧형식 : YYYY-MM-DD
ex) : 2019-09-01 20:30:59
- 년, 월, 일, 시, 분 형태로 표현할때 사용됩니다.
TIMESTAMP - 날짜/시간 정보
포멧형식 : YYYY-MM-DD
ex) : 2019-09-01- 20:30:59
- 실행 조건의 따라 다양하게 사용할수 있으며, 변경시 자동으로 날짜와 시간이 변경되는 설정도 가능합니다.
TIME - 시간 정보
포멧형식 : HH:MM:SS
ex) : 20:30:59
- 시, 분, 초 형태로 표현할때 사용합니다.