CS

[DB] MySQL 1 (미완)

느리님 2021. 9. 6. 17:37

DDL (Data Definition Language): 데이터 정의어

- 데이터베이스 객체 (table, view, index, ...) 의 구조를 정의

- 테이블 생성, 컬럼 추가, 타입변경, 제약조건 지정, 수정 등

SQL문 설명
CREATE 데이터베이스 객체를 생성
DROP 데이터베이스 객체를 삭제
ALTER 기존에 존재하는 데이터베이스 객체를 수정

 

 

DML (Data Manipulation Language): 데이터 조작어

- Data 조작기능

- 테이블의 레코드를 CRUD (Create, Retrieve, Updata, Delete)

SQL문 설명
INSERT (C) 데이터베이스 객체에 데이터를 입력
SELECT (R) 데이터베이스 객체에서 데이터를 조회
UPDATE (U) 데이터베이스 객체에 데이터를 수정
DELETE (D) 데이터베이스 객체에 데이터를 삭제

 

 

DCL (Data Control Language): 데이터 제어어

- DB, Table의 접근권한이나 CRUD 권한을 정의

- 특정 사용자에게 테이블의 검색권한 부여/ 금지 등

SQL문 설명
GRANT 데이터베이스 객체에 권한을 부여
REVOKE 데이터베이스 객체 권한 취소

 

 

 

TCL (Transaction Control Language): 트랜잭션 제어어

- transaction 이란 데이터베이스의 논리적 연산 단위

SQL문 설명
commit 실행한 Query를 최종적으로 적용
rollback 실행한 Query를 마지막 commit 전으로 취소시켜 데이터를 복구

 

 


CREATE

- DDL

- 데이터베이스 생성

CREATE database 데이터베이스명;
CREATE DATABASE 데이터베이스명
DEFAULT CHARACTER SET 값
COLLATE 값;

- Character set: 각 문자가 컴퓨터에 저장될 때 어떠한 '코드'로 저장될지에 대한 규칙의 집합

- Collation: 특정 문자 셋에 의해 데이터베이스에 저장된 값들을 비교검색하거나 정렬 등의 작업을 위해 문자들을 서로 '비교' 할 때 사용하는 규칙들의 집합

 

 

다국어 처리 (utf8mb3): dbtest 생성

CREATE DATABASE dbtest
DEFAULT CHARACTER SET utf8mb3
COLLATE utf8mb3_general_ci;

 

이모지 문자까지 처리

CREATE DATABASE dbtest
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb3_general_ci;

 

 

 

ALTER

- DDL

- 데이터베이스 변경

ALTER DATABASE dbtest
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;

 

 

 

DROP 

- DDL

- 데이터베이스 삭제

 

이름이 'dbtest'인 데이터베이스 삭제

DROP DATABASE dbtest;

 

 

 

USE

- DDL

- 데이터베이스 사용

 

이름이 dbtest인 데이터베이스 사용

USE dbtest;

 

 


TABLE 생성: 문자형 데이터 타입

데이터 유형 정의
CHAR[(M)] 고정 길이를 갖는 문자열
M은 1 ~ 255
CHAR(20)인 칼럼에 10자만 저장을 하더라도, 20자 만큼의 기억장소를 차지
VARCHAR[(M)] 가변 길이를 갖는 문자열
M은 1 ~ 65535 (2^16 - 1)
CHAR(20)인 칼럼에 10자만 저장을 하면, 실제로도 20자 만큼의 기억장소를 차지
TINYTEXT[(M)] 최대 255 (2^8 - 1) byte
TEXT[(M)] 최대 65535 (2^16 - 1) byte
MEDIUMTEXT[(M)] 최대 16777215 (2^24 - 1) byte
LONGTEXT[(M)] 최대 4294967295 (2^32 - 1) byte
ENUM('value1', 'value2', ...) 열거형, 정해진 몇가지의 값들 중 하나만 저장
최대 65535개의 개별 값을 가질 수 있고, 내부적으로 정수 값으로 표현된다.
SET('value1', 'value2', ...) 집합형, 정해진 몇가지의 값들 중 여러 개를 저장.
최대 64개의 요소로 구성될 수 있고, 내부적으로는 정수 값이다.

 

 

 

TABLE 생성: 숫자형 데이터 타입

데이터 유형 바이트 정의
BIT[(M)] 1 비트 값 유형. M: 값 당 비트 수 (1 ~ 64)
BOOL, BOOLEAN   TINYINT(1) 과 같다. 0은 false, 0이 아닌 값은 true로 간주
TINYINT[(M)] 1 (signed) -128 ~ 127
(unsigned) 0 ~ 255 (2^8 - 1)
SMALLINT[(M)] 2 (signed) -32768 ~ 32767 
(unsigned) 0 ~ 65535 (2^16 - 1)
MEDIUMINT[(M)] 3 (signed) -(2^23) ~ (2^23) - 1
(unsigned) 0 ~  (2^24 - 1)
INT[(M)] 4 (signed)  -(2^31) ~ (2^31) - 1
(unsigned) 0 ~  (2^32 - 1)
BIGINT[(M)] 8 (signed)  -(2^63) ~ (2^63) - 1
(unsigned) 0 ~  (2^64 - 1)
FLOAT[(M, D)] 4 (signed) -3.402823466E+38 ~ 1.175494351E-38
(unsigned) 1.175494351E-38 ~ 3.402823466E+38
DOUBLE[(M, D)]
DOUBLE PRECISION[(M, D)]
REAL[(M, D)]
8 (signed) -1.7976931348623157E+908 ~ -2.225073858585072014E-308
(unsigned) 2.2250738585072014E-308 ~ 1.7976931348623157E+308
FLOAT(p)   부동 소수점 숫자. p는 비트 정밀도를 가리키지만, MySQL은 결과 데이터 타입으로 FLOAT 또는 DOUBLE을 사용할지를 결정할 때에만 이 값을 사용한다.
DECIMAL[(M, D)] 길이+1 묶음 고정 소수점 숫자
M: 전체 자릿수 (Precision: 정밀도), D: 소수점 뒷 자리수 (Scale: 배율)
DEC[(M, D)]
NUMBER[(M, D)]
FIXED[(M, D)]
  DECIMAL과 동의어다.
FIXED 동의어는 다른 데이터베이스 시스템과의 호환을 위해서 사용하는 것

 

 

 

TABLE 생성: 날짜형 데이터 타입

데이터 유형 바이트 정의
DATA 3 YYYY-MM-DD ('1001-01-01' ~ '9999-12-31')
TIME 3 HH:MM:SS ('-838:59:59' ~ '-838:59:59') 
DATATIME 8 YYYY-MM-DD HH:MM:SS ('1001-01-01 00:00:00' ~ '9999-12-31 23:59:59')
TIMESTAMP[(M)] 4 1970-01-01 ~ 2037년 임의 시간 (1970-01-01 00:00:00 를 0으로 해서 1초단위로 표기)
YEAR[(2|4)] 1 2와 4를 지정할 수 있다. 2인 경우에 값의 범위는 70 ~ 69, 4인 경우에는 1970 ~ 2069

 

 

 

TABLE 생성: 이진 데이터 타입

데이터 유형 정의
BINARY[(M)] CHAR 유형과 유사하지만 이진 바이트 문자열을 이진이 아닌 문자열로 저장
M: 바이트 단위의 열 길이
VARBINARY[(M)] VARCHAR 유형과 유사하지만 이진 바이트 문자열을 이진이 아닌 문자열로 저장
M: 바이트 단위의 열 길이
TINYBLOB[(M)] 이진 데이터 타입. 최대 255 (2^8 - 1) byte
BLOB[(M)] 이진 데이터 타입. 최대 65535 (2^16 - 1) byte
MEDIUMBLOB[(M)] 이진 데이터 타입. 최대 16777215 (2^24 - 1) byte
LONGBLOB[(M)] 이진 데이터 타입. 최대 4294967295 (2^32 - 1) byte

 

 

 

TABLE 생성

CREATE TABLE table_name (
	column_name1 Type [optional attributes],
    	column_name2 Type,
    	..
    	column_nameN Type
);

 

 

 

TABLE 생성: 제약 조건

- 컬럼에 저장될 데이터의 조건을 설정하는 것

- 제약조건을 설정하면 조건에 위배되는 데이터는 저장 불가

- 테이블 생성시 컬럼에 직접 지정하거나 CONSTRAINT 로 지정, 또는 ALTER를 이용하여 설정 가능

제약 조건 Description
NOT NULL 컬럼에 NULL값을 저장할 수 없고, 반드시 쿼리문을 이용하여 값을 지정
UNIQUE 컬럼에 중복된 값을 저장 할 수 없음, NULL값은 허용
PRIMARY KEY 컬럼에 중복된 값을 저장할 수 없고, NULL값도 허용하지 않음.
주로 ROW를 구분하기 위한 유일한 값을 지정
'기본키'
FOREIGN KEY 특정 테이블의 PK 컬럼에 저장되어 있는 값만 저장, NULL값은 허용
'참조키, '외래키'
references를 이용하여 어떤 컬럼에 어떤 데이터를 참조하는지 반드시 지정
DEFAULT NULL값이 들어올 경우 기본 설정되는 값을 지정
CHECK 값의 범위나 종류를 지정
MySQL 8.0.16 부터 사용가능