테이블 생성할 때 마지막 속성에 쉼표 써서 에러난 게 기억에 남는다. 자바스크립트처럼 자동 포맷팅 됐으면 얼마나 좋아.
오늘은 DB 입문이라서 개념을 살펴보고, 기본 명령어에 대해 배웠다. 데이터 정의어, 데이터 조작어, 데이터 제어어!
과제는 데이터베이스를 새로 만들어서, 테이블을 만들고 다양한 조건의 SQL문을 작성해봤다.
데이터베이스와 DBMS
- 데이터베이스: 다양한 정보를 체계적으로 저장하고 관리하는 데이터의 집합. (예: 교육생 데이터, 신용카드 데이터 등)
- DBMS(Database Management System): 데이터베이스를 생성, 관리, 공유할 수 있도록 돕는 소프트웨어
파일시스템과 데이터베이스 비교
- 파일 시스템의 문제점:
- 데이터 중복, 데이터 불일치 발생 가능
- 유지보수와 데이터 공유에 많은 시간 소요
- 데이터베이스의 장점:
- 데이터 중복 최소화, 데이터 일관성 유지
- 데이터 공유와 접근성 개선
SQL (Structured Query Language) 분류
- DDL (Data Definition Language): 데이터 정의 (CREATE, ALTER, DROP).
- DML (Data Manipulation Language): 데이터 조작 (INSERT, UPDATE, DELETE, SELECT).
- DCL (Data Control Language): 권한 관리 (GRANT, REVOKE)
MySQL 주요 명령어
[시작하기]
mysql -u root -p
[주요 명령어]
-- 데이터베이스
show databases;
create database [DB명] [DB 기본 문자셋] [데이터 정렬 방식];
use [DB명]; //사용 선언
show tables; //테이블 목록 확인
drop database [DB명] //DB 삭제
-- 테이블
create table 테이블이름(
속성이름1 데이터타입 제약조건,
속성이름2 데이터타입 제약조건
);
desc [테이블명]; //테이블 구조 확인
- CREATE문: 데이터베이스와 테이블 생성
- 데이터타입: 숫자형(INT, FLOAT), 문자형(CHAR, VARCHAR), 날짜형(DATE, DATETIME)
- ALTER문: 기존 테이블 구조 변경(컬럼 삭제/삽입 등)
- DROP문: 테이블 및 데이터 삭제
DDL : CREATE문
[데이터베이스 생성 + 한글 인코딩]
show databases;
-- create database [DB명] [DB 기본 문자셋] [데이터 정렬 방식]
create database mydatabase default character set utf8 collate utf8_general_ci;
create database sesac character set utf8mb4 collate utf8mb4_unicode_ci;
DB 기본 문자셋
- `default character set utf8` : 대부분의 언어 표현 가능 but 이모지 특수문자 X
- `character set utf8mb4` : utf의 확장판 utf8mb4, 이모지 O
데이터 정렬 방식 (대소문자 구분 및 정렬 규칙)
- `collate utf8_general_ci` : ci(case insensitive) 빠르고 간단한 대소문자 무시 정렬
- `collate utf8mb4_unicode_ci` : 언어별로 더 정확한 비교 정렬 가능
[테이블 생성]
[테이블 제약 조건]
create table 테이블이름(
컬럼1 데이터타입 제약조건 나열
column2 varchar(50) not null default '기본값 설정' unique,
...
);
-- 예제
create table user(
id int primary key auto_increment,
name varchar(10) not null,
age int not null,
address varchar(100)
);
- not null : null인 데이터 허용 안함
- unique: 컬럼의 데이터가 모두 다른 값 갖는 것 보장
- primary key: 기본키 제약 조건(unique + not null 조건)
- check: 외래키 제약 조건
- foreign key: 입력된 값이 특정 조건 만족하는 지 확인 (MySQL에서 동작 x)
- default: 값이 입력되지 않은 경우 기본값 설정
DDL : ALTER, DROP문
[참고] DROP vs. TRUNCATE
DML
INSERT, UPDATE, DELETE, SELECT, ORDER BY, DISTINCT,
[SELECT문]
where 조건
- `!=` `^=` `<>` 같지 않다
- `NOT 컬럼명=` ~와 같지 않다
- `between A and B`
- `IN (lsit)` 리스트에 있는 값 중 어느 하나라도 일치하면 참
- `LIKE '비교문자열'`
- `IS NULL` True/ false
DISTINCT 중복된 데이터 제거
LIMIT 출력 개수 제한
GROUB BY 속성 이름끼리 그룹으로 묶는 역할, HAVING group by 절의 결과를 나타내는 그룹 제한
JOIN
여러 테이블을 연결해 데이터를 조회
- Naturl Join
- Inner Join: 두 테이블의 공통된 데이터만 조회.
- Outer Join
- Left Outer Join
- Right Outer Join
- Full Outer Join
- Foreign Key: 테이블 간 관계를 정의하여 데이터 무결성을 유지
DCL: GRANT, REVOKE
-- 사용자에게 권한 부여
GRANT permission_type ON db_name.table_name
TO username@host IDENTIFIED BY 'pw' [WITH GRNAT OPTION];
-- 사용자 권한 회수
REVOKE permission_type ON db_name.table_name FROM username@host;
'Today I Learned > SeSAC 웹 2기' 카테고리의 다른 글
React Event Handling | 11주차 (3) (0) | 2025.01.14 |
---|---|
Node.js MVC 패턴 로그인 기능, 방명록 만들기 회고 | 6주차(2) (0) | 2024.12.03 |
Node.js Form 전송(get, post 요청) 과제 회고 | 5주차(1) (1) | 2024.11.27 |
Node.js 입문, Express 모듈 서버 만들기 | 4주차(2) (0) | 2024.11.21 |
JS part2, 서버, AWS EC2 | 4주차(1) (1) | 2024.11.19 |