# 데이터베이스 개요
- 데이터베이스의 종류
1) 관계형 데이터베이스
- 모두 똑같은 데이터베이스 문법을 공유하나, 세부적인 부분에서 다른 특성을 지닌다
- ex) mysql, oracle, mssql
2) nosql
- 전체적인 구조
1) database Server : 실제로 데이터베이스(정보들) 가 저장되어 있는 곳
- 정보의 구조 : Database > Table
> "Database" 라는 구조 안에, "Tables" 가 있고, Tables 안에 (row, col) 형식의 "field"가 있다
2) database Client : 데이터베이스에 접근하기 위한 여러 툴들 (컴파일러같은거랑 비슷한 맥락)
- mysql client : cmd 창으로 하는 방식. (고전적인 툴)
- phpMyAdmin : php 를 이용해서 데이터베이스를 관리하는 방식
- mysql query browser
# 기본 데이터베이스 문법
- 데이터베이스 레벨 문법
1) show databases : 데이터베이스를 시각적으로 표현하도록 하는 문법
2) create database `~` : `~` 이름의 데이터베이스를 추가한다
> 이때, 여러 조건문이 추가적으로 뒤에 붙을 수도 있으나, 그 내용은 나중에 배움
3) drop database `~` : `~` 이름의 데이터베이스 삭제
4) use ~ : ~ 이름의 데이터베이스를 선택한다
- 테이블 레벨 문법
1) show tables : 해당 데이터베이스에 있는 모든 테이블을 보여줌
2) desc `~` : `~` 이름을 가진 테이블의 스키마를 출력
> 이때, "스키마" 는 쉽게 말하면 "스켈레톤"이랑 똑같다고 보면 됨
3) create table `~` : 해당 데이터베이스에 `~` 이름의 테이블을 생성
> 기본 문법 :
CREATE TABLE table_name (
칼럼명1 data_type,
칼럼명2 data_type
)
> 추가 조건문은 아래에 후술
4) drop table `~` : 해당 데이터베이스에 있는 `~` 이름의 테이블 삭제
# 데이터 타입 종류
- 문자 관련 데이터 타입 :
> (최대 길이/용량 기준) char, varchar < tinytext < text
** char 의 경우, 정해진 길이가 있기 때문에 항상 차지하는 용량으로 인해 비효율적일 수 있으나, 검색 속도가 빠름
** varchar 의 경우, 길이가 다양하더라도, 딱 해당된 길이만큼만의 용량을 차지하기 때문에 메모리 낭비가 없다.
- 숫자 관련 데이터 타입 :
> (최대 길이/용량 기준) tinyint < smallint < mediumint < int
- 날짜 관련 데이터 타입 : date, datetime 등
- 특수 데이터 타입 : enum (딱 정해진 입력만 받을 수 있다)
# 테이블에 데이터 삽입하는 문법
- 방법1) INSERT INTO table_name VALUES (value1, value2, value3,...)
> 장점 : 일일이 컬럼 내용을 기술할 필요가 없어서 간편
- 방법2) INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3,...)
> 장점 : 컬럼 순서를 바꿔서 입력이 가능하며,
해당 컬럼에 입력할 내용이 없을 경우, 디폴트 값으로 입력됨
# 테이블의 필드 값을 수정하는 문법
- 기본 문법 :
> UPDATE (테이블명) SET (컬럼1=컬럼1에 새로 넣을 data), (컬럼2=컬럼2에 새로 넣을 data) WHERE (특정한 row 를 뽑기 위한 column조건문)
ex) UPDATE `student` SET address='서울';
> where 조건문이 따로 없기 때문에, 모든 row 에 대해서 적용
ex) UPDATE `student` SET name='이진경' WHERE id=1;
> id=1 인 row 에 대해서만, name 컬럼값을 이진경으로 바꿔줌
ex) UPDATE `student` SET name='이고잉', birthday='2001-4-1' WHERE id=3;
> 여러 개의 컬럼을 바꿔줄때도 이 방식을 활용
# 삭제 관련 문법
- 테이블 "자체를" 전체 삭제 문법
> drop (테이블 명) : `~` 라는 이름의 테이블을 삭제한다
- 행 단위로 테이블 데이터 삭제 :
> delete from (테이블 명) [where (삭제하려는 행의 column 관련 조건)]
ex) DELETE FROM student WHERE id = 2;
- 테이블 안에 있는 "데이터들 전체" 삭제 문법
> truncate (테이블 명)
# 조회 관련 문법
- 기본 문법 구조 :
> select (특정 column 명) from (특정 테이블 명) where (특정 column 을 뽑기 위한 column 조건)
ex) SELECT name, birthday FROM student WHERE id=3;
> 조건문 종류 :
1) limit
2) group by
3) order by
4) key
5) join
- limit 조건문 :
> select (~) from (~) limit 숫자1, 숫자2 : 숫자1을 기준으로, 숫자2 개의 행을 가져온다
ex) SELECT * FROM student LIMIT 1,3 <- 1행을 기준으로, 3개의 행을 가져온다
- group by 문법 :
> SELECT (특정 column 명) FROM (테이블명) GROUP BY (그룹핑 할 기준 칼럼명)
> 이렇게 할 경우, 그룹핑 기준으로 행들을 정리할 수 있다.
ex) select sex from student group by sex;
ex) select sex,sum(distance), avg(distance) from student group by sex;
- order by 문법 :
> select (특정 column 명) from (테이블 명) order by (정렬 기준이 되는 column 명1, desc/asc), (정렬 기준이 되는 column 명2, desc/asc)
ex) select * from student order by distance desc, address asc;
- 조회를 위한 설정 : key
> key 종류 : primary key, unique key, normal key, 중복 key
1) primary key
ex) PRIMARY KEY (`id`) ;
2) unique key
ex) UNIQUE KEY `idx_number` (`number`) USING BTREE ;
> 두 키의 공통점 : 중복을 허용하지 않는다 -> 따라서, 검색이 빠르다
> 두 키의 차이점 : primary 의 경우엔 오로지 하나의 column만을 설정할 수 있으나,
unique 의 경우엔 여러 개의 column 을 unique 설정할 수 있다
3) normal key
ex) KEY `idx_department` (`department`),
> 특정 컬럼의 값을 키 값으로 설정함.
이때, 키 값을 컬럼과는 다른 이름으로 지을 수 있다는 점에서는 메리트가 있는듯.
내가 편하게 쓸 수 있는 키 값의 이름으로 설정할 수 있으므로.
4) 중복 key
ex) KEY `idx_department_name` (`department`,`address`),
> 여러 개의 컬럼을 하나로 묶어서, 하나의 키 값으로 사용할 수 있다.
- Join 문법 :
> 문법 형식 : SELECT (출력 하고 싶은 column) FROM (테이블 1) LEFT JOIN (테이블 2) ON (두 테이블을 연결시킬 조건);
> 의의 : 여러개의 테이블을 하나로 뭉치기 위한 방식
> 전체적인 원리 :
1. (두 테이블을 연결시킬 조건)을 기준으로, 집합을 그려본다 <- 교집합 부분은, 테이블1과 2가 공통으로 조건을 만족하는 행이다
2. Join 의 종류에 따라, 다르게 출력한다
> 종류 : (링크 : https://opentutorials.org/course/195/1409 )
1) 내부 join : 오로지, 교집합인 행만 출력한다
2) 외부 join : 교집합 이외의 다양한 집합 행을 출력한다
> 대표적으로 left join, right join 이 있으며, full outer join문도 있다
# 사용자 권한 문법
- 기본 문법 형식 :
> GRANT (권한 종류) ON (데이터베이스 . 테이블) TO ('아이디'@'호스트') IDENTIFIED BY ('비밀번호')
- 각 부분별 설명 (1) : TO ('아이디'@'호스트') IDENTIFIED BY ('비밀번호')
> 용도 : 사용할 수 있는 사람이 누구인가?
> 아이디 형식 :
1) egoing@123.100.100.100 : egoing 이라는 사용자이며, 123.100.100.100 라는 IP 에서 접근할때만 가능
2) egoing@% : egoing 이라는 사용자이기만 하면 가능 (IP 제한 없음)
> 이 아이디이 형식이어야 하며 + 비밀번호도 일치해야 한다
- 각 부분별 설명 (2) : ON (데이터베이스 . 테이블)
> 용도 : 어떤 테이블에 접근하고 싶은가?
> 형식 :
1) 기본 :
2) 특수 :
- (데이터베이스 명) . * : 특정 데이터베이스의 "모든" 테이블들을 가져온다
- * . * : "모든" 데이터베이스의 "모든" 테이블들을 가져온다
- 각 부분별 설명 (3) : 권한의 제한
> 용도 : 어떤 권한을 허용할 것인가?
> 종류 : create, drop, alter 등등..
> 주로 통용되는 권한 템플릿
1) 개발자에게 허용되는 권한 :
(테이블 내용물 변경) DELETE, INSERT, SELECT, UPDATE
> 테이블의 "내용물" 에 접근하는것만 허용함
2) 설계자에게 허용되는 권한 :
(테이블 구조 변경) ALTER, CREATE, DROP, INDEX <- 데이터베이스/테이블 "자체" 를 생성/변경한다
(테이블 내용물 변경) INSERT, SELECT, UPDATE, DELETE, INSERT <- 테이블의 "행" 만을 생성/변경한다
> 테이블 "구조"를 변경하는 것도 허용
3) DBA에게 허용되는 권한 : "모든" 권한 허용
> 특정 사용자의 권한 열람
- 문법 : SHOW GRANTS [FOR 사용자]
ex) SHOW GRANTS FOR dev;
- 사용자의 권한 제거를 위한 문법
1) 권한만 삭제하는 방식 : Revoke 문법
> 형식 : REVOKE (권한 종류) ON (데이터베이스 . 테이블) FROM (사용자)
- 특정 사용자가, 특정 테이블에 접근하는 특정 권한을 제거해준다
ex) revoke DELETE on class.* from dev;
2) 아예 허용 가능했던 사용자를 삭제하는 방식 : Drop User 문법
> 형식 : DROP USER (사용자 형식)
- 특정 사용자를 아예 권한 이용 자체를 못하도록 해준다
ex) DROP USER `dev`@`%`;
'데이터베이스 & 웹 > 데이터베이스' 카테고리의 다른 글
ER 모델링 (0) | 2020.04.29 |
---|