이번 포스팅에서는 데이터베이스 안에 있는 테이블(table)의 구조에 대해 간단히 살펴보고 MySQL을 사용할 때 작성하게 되는 SQL 구문에 대해 정리해보고자 한다.
< 목차 >
- 테이블(table) 구조
- SQL 구문 정리
< 테이블(table) 구조 >
엑셀을 사용해서 데이터베이스와 테이블의 개념을 알아보도록 하자. 우리가 얘기하는 데이터베이스라는 것은 엑셀파일 그 자체를 일컫는다고 할 수 있다. 그리고 데이터베이스 안에 있는 테이블들은 엑셀 파일 안에 있는 sheet라고 할 수 있다. sheet1, sheet2, sheet3, ... 으로 계속해서 sheet를 추가할 수 있듯이 우리의 데이터베이스도 테이블들을 추가적으로 생성할 수 있다. (데이터 베이스 안에 다수의 테이블들이 존재하고 테이블 안에 데이터를 집어넣어 관리하는 형태)
테이블은 필드(Field)와 레코드(Record)로 이루어져 있는데 필드는 데이터가 저장되어 있는 변수라고 생각하면 된다. 위의 테이블에는 아이디, 패스워드, 이름이라는 필드가 존재한다. 같은 종류의 데이터들을 저장하기 위한 항목으로써 아이디라는 필드에는 web7722, test, sample이라는 데이터가 저장되어 있는 것이다. 마찬가지로 패스워드라는 필드에는 1234라는 데이터가, 이름이라는 필드에는 곽인구, 홍길동, 길동이라는 데이터가 저장되어 있다. 그리고 레코드는 이렇게 필드에 연관성있게 저장되어 있는 데이터들의 집합을 일컫는다.
< SQL 구문 정리 >
SQL 문법은 크게 3가지로 구분할 수 있다.
- DDL (Data Definition Language) : 데이터베이스나 테이블을 정의할 때 사용하는 언어
- DML (Data Manipulation Language) : 데이터를 조작할 때 사용하는 언어 (조회, 삽입, 수정, 삭제)
- DCL (Data Control Language) : 권한을 설정할 때 사용하는 언어
각각의 종류는 다음과 같다.
☞ DDL
CREATE : 데이터베이스, 테이블을 생성하는 명령어
ALTER : 테이블을 수정하는 명령어
DROP : 데이터베이스, 테이블을 삭제하는 명령어
TRUNCATE : 테이블을 초기화시키는 명령어
☞ DML
SELECT : 데이터를 조회하는 명령어
INSERT : 데이터를 삽입하는 명령어
UPDATE : 데이터를 수정하는 명령어
DELETE : 데이터를 삭제하는 명령어
☞ DCL
GRANT : 특정 데이터베이스 사용자에게 특정 작업에 대한 권한 부여
REVOKE : 특정 데이터베이스 사용자에게 특정 작업에 대한 권한 박탈 및 회수
COMMIT : 트랜잭션의 작업이 정상적으로 완료되었음을 관리자에게 알려줌
ROLLBACK : 트랜잭션의 작업이 비정상적으로 종료되었을 때 원래 상태로 복구
SQL 구문을 작성할 때 DDL, DML, DCL에 해당하는 부분은 대문자로 작성해주는 것이 관례이다. 그리고 SQL 구문 뒤에는 기본적으로 세미콜론( ; )을 붙여서 실행한다.
☞ 많이 쓰는 데이터 타입
데이터 타입 | 내용 |
VARCHAR(M) | 글자형 가변길이 값을 저장하는데 사용합니다. (글자 길이가 유동적일 때 사용) |
CHAR(M) | 글자형 고정길이 값을 저장하는데 사용합니다. (글자 길이가 고정적일 때 사용) |
TEXT | 글자형 게시글의 내용을 저장할 때 사용합니다. (VARCHAR 보다 많이 저장 가능) |
INT | 숫자 타입을 저장할 때 사용합니다. |
DATE | 날짜를 표현합니다. YYYY-MM-DD |
DATETIME | 날짜와 시간을 표현합니다. YYYY-MM-DD HH:MM:SS |
TIMESTAMP | DATETIME과 같은 형식을 가지지만 1970년 ~ 2038년 1월 19일까지 사용가능합니다. |
DATETIME vs TIMESTAMP
▶ 지원범위
DATETIME은 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 까지 가능합니다.
TIMESTAMP는 1970-01-01 00:00:00 ~ 2038-01-19 03:14 까지 가능합니다.
▶ 컬럼타입
DATETIME은 문자형
TIMESTAMP는 숫자형
▶ 저장공간
DATETIME은 8 byte를 차지함
TIMESTAMP는 4 byte를 차지함
SQL 구문 | 의미 |
mysql -u[계정명] -p[패스워드] | CLI 환경에서 MySQL 접속할 때 사용 |
SHOW DATABASES; | 모든 DBs 보기 |
SHOW TABLES; | 모든 tables 보기 |
USE [데이터베이스명]; | 데이터베이스 선택 (엑셀파일 열기 같은 의미) |
DESC [테이블명]; | 테이블의 Field를 한줄로 보기 |
CREATE DATABASE [데이터베이스명]; | 데이터베이스 생성 (엑셀파일 생성 같은 의미) |
DROP DATABASE [데이터베이스명]; | 데이터베이스 삭제 |
DROP TABLE [테이블명]; | 테이블 삭제 |
CREATE TABLE [테이블명] ( [필드1 데이터타입,...] ); | 테이블 생성하기 |
SELECT * FROM [테이블명]; | 해당 테이블에 대한 모든 필드, 레코드 보기 |
SELECT 필드1, 필드2, ... FROM [테이블명]; | 필드1, 필드2, ... 에 대한 테이블 전체 레코드 보기 |
SELECT * FROM [테이블명] ORDER BY [필드명] DESC | ASC | ORDER BY [필드명]을 기준으로 DESC 내림차순 , ASC 오름차순 |
SELECT * FROM [테이블명] WHERE [필드] LIKE '%aa'; | 필드에 해당되는 내용 중 aa~로 시작하는 데이터 가져오기 |
SELECT * FROM [테이블명] WHERE [필드] LIKE 'aa%'; | 필드에 해당되는 내용 중 ~aa로 끝나는 데이터 가져오기 |
SELECT DISTINCT [필드] FROM [테이블명]; | 해당 테이블의 필드에서 중복값을 제거하고 가져오기 |
INSERT INTO [테이블명] (필드1, 필드2, ... ) VALUES (값1, 값2, ... ); |
필드1, 필드2, ... 에 각각 값1, 값2, ... 를 삽입하기 |
UPDATE [테이블명] SET [필드1]='새로운값1', [필드2]='새로운값2' WHERE [필드]='값'; |
조건에 해당되는 레코드에서 [필드1]의 값을 '새로운값1'로 [필드2]의 값을 '새로운값2'로 변경하기 |
DELETE FROM [테이블명] WHERE [필드]='값'; | 테이블에서 조건에 해당되는 모든 레코드 제거하기 |
ALTER TABLE [기존테이블명] RENAME [새로운테이블명]; | 테이블 이름 바꾸기 |
ALTER TABLE [테이블명] CHANGE [기존필드명] [새로운필드명] [타입]; |
필드 이름 바꾸기 |
ALTER TABLE [테이블명] MODIFY COLUMN [필드명] [타입] [변경할타입]; |
필드 타입 변경하기 |
ALTER TABLE [테이블명] DROP [필드명]; | 해당 테이블의 필드를 삭제하기 |
ALTER TABLE [테이블명] AUTO_INCREMENT=1; | AUTO_INCREMENT를 초기화하기 |
ALTER TABLE [테이블명] ADD [필드명] [타입]; | 해당 테이블의 맨 뒤에 필드 추가하기 |
ALTER TABLE [테이블명] ADD [필드명] [타입] FIRST; | 해당 테이블의 맨 앞에 필드 추가하기 |
ALTER TABLE [테이블명] ADD [필드명] [타입] AFTER [특정필드명]; |
[특정필드명] 뒤에 새로운 필드 추가하기 |
ALTER TABLE [테이블명] MODIFY COLUMN [필드명] [타입] AFTER [특정필드명]; |
[특정필드명] 뒤로 [필드명] 자리 이동하기 |
ALTER TABLE [테이블명] MODIFY COLUMN [필드명] [타입] FIRST; | 해당 테이블의 맨 앞으로 필드 이동하기 |
SOURCE [파일경로]; | 해당 경로에 있는 파일 실행하기 |
'MySQL' 카테고리의 다른 글
Node.js - MySQL (6) 환경변수 설정하기 (.env) (2) | 2022.03.01 |
---|---|
Node.js - MySQL (5) 커넥션 풀 (Connection Pool) (0) | 2022.02.28 |
Node.js - MySQL (4) MySQL 연결하기 (개념) (0) | 2022.02.28 |
Node.js - MySQL (3) 테이블 생성하기 (0) | 2022.02.18 |
Node.js - MySQL (1) 환경설정 (0) | 2022.02.17 |