Language/mySQL

공부 내용 정리 mySQL :: 기초 II

Cs.Woo 2021. 5. 17. 23:14

# 테이블이란?

 테이블은 데이터가 실질적으로 저장되는 저장소이다.

 데이터베이스 > 테이블 > 필드 에 데이터가 저장되는 것이다. 데이터베이스가 디렉토리라고 표현하였는데, 디렉토리는 파일들을 그룹핑하는 역할을 하는 것이고 파일은 실제로 데이터가 담기는 역할을 하고 있는 것이다.

 테이블을 학습하기 이전에 스키마(schema)라는 것에 대하여 먼저 알아야 한다.

 스키마는 테이블에 적재될 데이터의 구조와 형식을 정의하는 것을 의미한다. 데이터베이스는 구조화된 데이터들이기 때문에 데이터를 적재할 때에 임의로 모든 데이터를 넣을 수 있는 것이 아니라, 적재할 데이터의 타입을 지정해주어야 한다. 

 

번호 이름 성별 이메일
1 가나다 example@example.com
2 라마바 example@example.com

 상기의 표와 같이, 첫번째 row에서 정의한 바와 같이 각각의 Column에 들어갈 데이터들의 형식(번호-숫자 이름- 3글자 성별 남/여 ...)을 미리 정해두고 데이터를 정리하듯이, 데이터베이스에서도 이와 같은 논리로 스키마 라는 것을 해야만 하는 것이다. 

 일종의 설계도를 만드는 행위와 비슷하다고 할 수 있다.

 

 스키마에서 Default는 null값이 입력되었을 경우 대신 출력될 기본값이라는 의미를 갖고있다.

 

# SQL 자료형

 - 문자형 

CHAR() 0 ~ 255 고정문자 길이  ( 255글자를넘어가는순간 기록이 안됨 ) <검색방면으로 우위>
VARCHAR() 0 ~ 255 가변문자 길이 ( 255글자를넘어가는순간 기록이 안됨 ) <용량방면으로 우위>
TINYTEXT 최대 255 문자길이
TEXT 최대 65535 문자길이
BLOB 최대 65535 문자길이
MEDIUMTEXT 최대 16777215 문자길이
MEDIUMBLOB 최대 16777215 문자길이
LONGTEXT 최대 4294967295 문자길이
LONGBLOB 최대 4294967295 문자길이

 - 만일 VARCHAR(4) 라고 데이터 타입을 부여했으면, 해당되는 변수에는 4글자까지만 허용하겠다는 의미이다.

길이는 많이 지정해줄수록 좋을 수 있겠지만, 가급적이면 최소한의 크기로 최대한의 효율을 내는 것이 가장 이상적인 방법이다.

 

- 숫자형

TINYINT( ) -128 ~ 127 정수형
0 ~ 255 정수형, UNSIGNED
SMALLINT( ) -32768 ~ 32767, 정수형
0 ~ 65535, 정수형, UNSIGNED
MEDIUMINT( ) -8388608 to 8388607, 정수형
0 to 16777215 , 정수형, UNSIGNED
INT( ) -2147483648 ~ 2147483647 정수형
0 ~ 4294967295, 정수형, UNSIGNED
BIGINT( ) -9223372036854775808 ~ 9223372036854775807, 정수형
0 ~ 18446744073709551615, 정수형, UNSIGNED.
FLOAT 작은 부동소수점
DOUBLE( , ) 큰 부동소수점
DECIMAL( , )  

 TINYINT 에서 UNSINGED를 볼 수 있는데 데이터 타입에 이것을 같이 부여하게 되면, 더이상 음수의 값은 받을 수 없게 되지만 음수만큼의 양수를 더 받을 수 있게되어 최대 0~ 255의 양의 정수를 받을 수 있도록 하는 것이 UNSINGED이다.

 

- 날짜

DATE YYYY-MM-DD.
DATETIME YYYY-MM-DD HH:MM:SS.
TIMESTAMP YYYYMMDDHHMMSS.
TIME HH:MM:SS.

 

- 지정된 값 인풋

ENUM ( ) 정해진 값을 강제
SET  

 ENUM 은 Y/N과 같이 둘중에 하나만 입력받을 수 있도록 강제할 때 사용하는 데이터타입이다.

 

# 테이블 생성 및 삭제 실습  

SHOW DATABASES;

CREATE DATABASE `테스트 데이터` CHARACTER SET utf8 COLLATE utf8_general_ci;

USE `테스트 데이터`;

SHOW TABLES;

CREATE TABLE article (
    id INT(10),
    title TEXT,
    `body` TEXT
);

SHOW TABLES;
DESC article;

DROP TABLE article;

SHOW TABLES;