본문 바로가기
db

MySQL

by 오우지 2022. 7. 4.

MySQL의 데이터 타입은 

1. Numeric(숫자형)

2. Character(문자형)

3. Binary String(이진 문자형) - 사진 등을 담을 때 쓸 수 있다.

4. Temporal(날짜형)

 

1. Numeric

정수형

- TINYINT  - 1byte 0~255

- SMALLINT - 2bytes 0~65,535

- MEDIUMINT - 3bytes 0~16,777,215

- INT -4bytes 0~4,294,967,295

- BIGINT - 8bytes

 

실수형

DECIMAL(p, s)

DECIMAL(5, 2) -> -999.99 ~ 999.99

 

모든 컬럼의 기본값은 SIGNED이다.

 

2. Character

고정길이 문자열

CHAR(n) - 최대 255문자(2^8)

 

가변길이 문자열

VARCHAR(n) - 최대 n개로 지정, 1이나 2byte의 prefix를 가지며

256 까지는 1byte, 2byte라면 최대 65,535 의 길이를 가진다.

 

TEXT 문자열 - VARCHAR와 동일하며 n값은 시스템이 계산한다.

-TINYTEXT -1byte prefix + data 

-TEXT -2byte prefix + data

-MEDIUMTEXT -3byte prefix + data

-LONGTEXT -4byte prefix + data

 

 

3. Binary String Data Type

- 주로 사진 등의 데이터를 저장하는데 사용된다.

고정길이 이진 문자열

BINARY(n) - 최대 255(2^8)

 

가변길이 이진 문자열

VARBINARY(n) - 1 or 2 byte prefix + data 

 

BLOB 이진 문자열(VARBINARY(n)과 동일, n 값은 시스템이 계산)

-TINYBLOB -1byte prefix + data

-BLOB -2byte prefix + data

-MEDIUMBLOB -3byte prefix + data

-LONGBLOB -4byte prefix + data

 

4. Temporal Data Type

YEAR - YYYY

 

DATE - YYYY-MM-DD

 

TIME, TIME(fsp)

0 <= fsp <= 6으로 최대 100만분의 1초까지 저장 가능, 

TIME(2) -> 10:13:03.01 같이 100분의 1초까지 저장

 

DATETIME, DATETIME(fsp)

날짜와 시간

 

TIMESTAMP, TIMESTAMP(fsp)

외부적으로는 같아보이지만 내부적으로는 unix epoch(1970-01-01 00:00:02.000000 UTC)를 기준으로 초의 갯수로 저장

DATETIME에 비해 저장공간을 5byte에서 4byte로 줄일 수 있다. 하지만, 계산해야 되는 단점이 있다.

큰 의미는 없기 때문에 굳이 안쓴다.

 

 

DDL

컬럼의 제약조건은

NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK등 다섯가지 있다.

 

DB를 CREATE하는 두 가지 방법

1. 컬럼 레벨 정의 방식: FOREIGN KEY를 제외한 모든 제약조건을 설정 가능하지만 일반적으로 NOT NULL만 사용한다.

2. 테이블 레벨 정의 방식: NOT NULL을 제외한 모든 제약조건을 설정 가능, NOT NULL을 제외한 모든 컬럼 제약조건에 권장

 

컬럼은 수정, 삭제, 추가 가능하지만 제약조건의 수정을 불가하고 이론적으로 삭제, 추가만 가능하다. 

 

반환되는 결과의 형태에 따른 분류

- Single value query(단일값 쿼리), scalar query, 실행 결과가 항상 1개의 값 이하인 것

- Multi-value query(다중값 쿼리), column query, 실행 결과가 scalar value의 집합인 것

- Multy-row query(다중행 쿼리), table query, 실행 결과가 n-tuple의 집합인 것

 

컬럼 별칭의 사용제한

표준 SQL에서 별칭은 출력 용도로만 사용

SELECT, ORDER BY에서는 사용할 수 있으나

WHERE, GROUP BY에는 사용할 수 없다.

 

MySQL은 GROUP BY절에서 사용 가능하다.

 

웬만하면 표준 SQL 문법을 따르는게 DB 변경에 대응하기 용이하다.

굳이 별칭을 다른 절에서 사용하고 싶다면 WITH 키워드를 사용하면 된다. 하지만 이것도 테이블을 만들어내고 연산하는 것이므로 성능 면에서 손해다.

 

NULL

값이 존재하지 않는 것을 표현할 때 사용한다.

ASCII 00(NULL), 32(''), 48(0) 으로 표현하며 어떤 값과도 비교할 수 없다.

 

NULL과의 산술 연산은 NULL이며 비교연산은 항상 FALSE가 나온다. NULL의 확인은 항상 IS NULL 연산을 사용하자.

'db' 카테고리의 다른 글

where절 외의 서브쿼리  (0) 2022.08.31
where절 서브쿼리  (0) 2022.08.24