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 부터 사용가능 |