[ #3 ] MySQL - SQL과 테이블의 구조

SQL이란

Structured

Query

Language

의 약자이며 아래와 같은 특징을 가집니다.

특징

  1. SQL은 어떤 컴퓨터 언어보다 쉽습니다.
  2. 관계형 데이터베이스라는 카테고리에 속하는 제품들이 공통적으로 데이터베이스서버를 제어할 때 쓰이는 표준화된 언어이기에 매우 중요합니다.

-> 가성비가 뛰어난 언어


Table의 구조

table

row: 데이터 그자체

column: 데이터의 구조


MySQL Data 타입

MySQL에서 쓸 수 있는 데이터 타입은 아래의 표와 같습니다.

형태
데이터형
범위
크기
숫자형






TINYINT -128 ~ 128, 0 ~ 255 1 Byte
SMALLINT -32768 ~ 32767 , 0 ~ 65535 2 Byte
MEDIUMINT -8388608 ~ 8388607, 0 ~ 16777215 3 Byte
INT, INTEGER -2147483648 ~ 2147483647, 0 ~ 4294967295 4 Byte
BIGINT -9223372036854775808 ~ 9223372036854775807 ,
0 ~ 18446744073709551615
8 Byte
FLOAT -3.402823466E+38 ~ -1.175494351E-38 ,
1.175494351E-38 ~ 3.402823466E+38
4 Byte
DOUBLE [PRECISION], REAL 1.7976931348623157E+308 ~ -2.2250738585072014E-308 ,
0 ~ 2.2250738585072014E-308
8 Byte
DECIMAL(M,D), NUMERIC(M,D) 데이터 베이스 설정 및 시스템에 따라 다름 가변적 크기
날짜형



DATE ‘1000-01-01’ ~ ‘9999-12-31’ 3 Byte
TIME ‘-838:59:59’ ~ ‘838:59:59’ 3 Byte
DATETIME ‘1000-01-01 00:00:00’
~ ‘9999-12-31 23:59:59’
8 Byte
TIMESTAMP ‘1970-01-01 00:00:01’
~ ‘2038-01-19 03:14:07’
4 Byte
YEAR 1901 ~ 2155 1 Byte
문자(열)형







CHAR(M) 1~ 255 개의 문자 M <= 255
ByteBINARY(M) 1 ~ 255 개의 문자 M Byte
VARCHAR(M),
VARBINARY(M)
1 ~ 255 개의 문자 M Byte
TINYBLOB, TINYTEXT 최대 2^8 입력된 길이 만큼
BLOB, TEXT 최대 2^16입 력된 길이 만큼
MEDIUMBLOB, MEDIUMTEXT 최대 2^24 입력된 길이 만큼
LONGBLOB, LONGTEXT 최대 2^32 입력된 길이 만큼
ENUM 최대 65525 개 1 ~ 2 Byte
SET 최대 64 개의 셋 1 ~ 8 Byte

무조건 큰 범위의 큰 값을 사용하게되면 편하긴 하겠지만, 그만큼 저장공간을 차지하며, 느려질 수도 있기에 적절히 알맞은 타입을 선택해야합니다.


여러가지 제약조건

테이블을 작성할때에 컬럼별로 다양한 제약조건을 작성할 수 있는데 아래와 같은 제약 조건들이 있습니다.

  • NOT NULL : 해당컬럼은 비어있을 수 없습니다.
    • EX) VALUE1 VARCHAR2(10) NOT NULL
  • NULL : 해당 컬럼은 비어있어도 상관 없습니다.
    • EX) VALUE1 VARCHAR2(10) NULL
  • AUTO_INCREMENT : 값이 생성될때마다 값을 자동으로 1씩 증가시켜 줍니다.
    • EX) id INT(11) INCREMENT
  • UNIQUE : NULL은 허용하지만 중복은 불가능합니다.
    • EX) VALUE2 VARCHAR2(10) UNIQUE
  • PRIMARY KEY : NULL, 중복 둘다 불가능합니다.
    • EX) VALUE3 VARCHAR2(10) PRIMARY KEY
    • EX) PRIMARY KEY id (이미 생성된 컬럼에한해서)
  • FOREIGN KEY : NULL가능, 다른 테이블의 PRIMARY KEY여야 하고 해당 테이블의 컬럼에 삽입되지 않은 값은 사용 불가능합니다.
  • CHECK : 특정 범위 혹은 특정 값만 들어올 수 있게 합니다.
    • EX) VALUE5 VARCHAR2(10) CHECK(VALUE5 BETWEEN 1 AND 10)
    • EX) VALUE6 VARCHAR2(10) CHECK(VALUE6 IN (‘A’, ‘B’))
  • DEFAULT : NULL 값이 들어올 시 지전된 값을 삽입합니다.
    • EX) VALUE7 VARCHAR2(10) DEFAULT ‘홍길동’

Table 생성해보기

아래와 같이 스프레드 시트에있는 테이블을 mysql에서 만들어 보겠습니다.

dataonssheet

CREATE TABLE topic(
  id INT(11) NOT NULL AUTO_INCREMENT,
  title VARCHAR(100) NOT NULL,
  description TEXT NULL,
  created DATETIME NOT NULL,
  author VARCHAR(15) NULL,
  profile VARCHAR(200) NULL,
  PRIMARY KEY(id)
);