방대해진 데이터를 공통된 주제로 묶어 쉽게 관리할 수 있도록 해주는 도구.
-
oracle,mysqll,mariadb,postgresql,mongodb,msql,redis,dynamodb
-
포트 포워딩(포트 연결)을 통해 하나의 DB서버로 운영할 수 있음
-
개발자가 데이터에 접근하기 쉽게해주고, 여러명에서 데이터를 협업하여 운영
-
RDBMS(관계형 데이터베이스 시스템)
DBMS
- 계층형
- 네트워크형
- 관계형(관계형 DB)
- key-value(redis)
- nosql
RDBMS
(Relational Database Management System)
- 관계형 데이터에 기초
- 이상현상 방지에 따른 에러 잡기 좋음
- 모든 데이터를 2차원의 테이블(행과 열로 이루어진 표 형태)로 표현
- 테이블이 서로 연관되어 있기 때문에 다른 DBMS보다 효율적인 스키마 구성
- 데이터 관리를 위해 SQL이라는 쿼리를 사용
- oracle,mysql,postgresql,msql,...
Mysql(mariadb)
- 오라클과 더불어 세계에서 가장 널리 쓰이는 RDBS중 하나
설치(생략)
쇼핑몰
DBMS에 어떤 것을 저장해야할까요?
회원정보
상품정보
상품이미지
결제내역
주문정보
쿠폰
이벤트
적립금
데이터타입
1. 숫자타입
- 정수형 : int,Bingint
- 소수형 : float,double
2. 문자타입
-char,varchar,text
3. 날짜와 시간
- date,datetime, timestamp
4. enum
- enum(f,m) ==>괄호 안에 있는 데이터만 허용
5. json
-json date
이상현상 방지를 위한 자체적으로 조건을 걸어 validation을 함.
회원정보
고유번호 : 겹치지 않는 정보 값(uuid,int)
이름:문자
전화번호:문자
주소:문자
아이디:문자
비밀번호:문자
생년월일: 문자or 숫자
가입일자: datetime
제약 조건
1. NOT NULL:null을 지정할 수 없음(required)
2. UNIQUE:중복된 값을 지정할 수 없음
3. DEFAULT :기본값(값을 저장하지 않았을때 저장되는 기본값)
4. PRIMARY KEY, FOREIGN KEY
```
- 대표키(후보키) --> 다른 데이터와 구분하여 인덱싱하여 할 수 있 는 값
(후보키-- 대표키가 아니더라도 인덱싱할 수 있는 것)
==> 기본값으로 대표키와 후보키에는 unique와 not null임
- 외래키 --> 다른 테이블과 현재 테이블과 관계를 짓는 키
이상현상을 방지하기 위해서 필요
```
- AUTO_INCREMENT
데이터를 넣지 않아도 자동으로 수가 1씩 증가하여 증가
중복값이 절대 저장되지 않음, 단 직접 데이터 추가가 불가능
대표적으로 고유번호 idx옵션을 사용하지만, 보안적으로 중요한 경우는 uuid로 대체하여 사용하는 경우가 많음
모델링
:스키마를 정하는 과정
- 개념모델링
- 이 테이블(공간,표)에 어떤 것을 저장할까?
- 추상적인 모델링 개념에 가까움.
- 회원정보를 저장하기 위해 어떤 컬럼이 필요할까?
- erd(entity relation diagram,개체관계다이어그램)
- 논리모델링
- 테이블간의 관계(1:1,1:N,N:M)까지 추상화-> 개념적인 부분을 상세화하는 과정
- 정규화(반정규화 혹은 정규화가 반대로 되는 과정-어느정도 허용하는 과정,중복된데이터에 대해서)
- 스키마를 정의(데이터타입,제약조건)상세화
- 물리모델링
- 실제 dbms에 테이블을 추가할 수 있도록 형체화
SQL
DML,DDl,DCL,TCL
DML : 데이터 조직어
- CRUD
실제 데이터베이스에 있는 데이터를 조회하거나 저장하거나 검색하는 언어
create,read,update,delete
DDI : 데이터 정의어
- 테이블 생성, 데이터베이스 생성과 같은 데이터의 구조를 정의하는 언어
DCI : 데이터 제어어
- 데이터베이스 접근 권한에 관련된 명령어(읽기, 쓰기,삭제)
- 루트 계정을 통해서 각 계정에 대해서 접근 권한 설정 가능
TCL : 트랜젝션 제어어
- SQL작업의 단위를 묶어서 결과에 따라 별도로 제어하는 명령어(롤백,커밋)
명령어
- 데이터 생성
create table 테이블명
CREATE TABLE대소문자 구분 x
create table musinsa_user(
id bigint primary key,
namen varchar,
user_id => varchar 컬럼명 보통 소문자 언더바
birth varchar,
createdAt Date, )
- 데이터 조회
select *(all) from from 테이블명 -> 해당 테이블의 모든 데이터를 조회
select 컬럼명1,컬럼명2,컬럼명3 from 테이블명 해당 테이블의 특정한 컬럼을 조회
-> select user_id from tb_user
select user_id from tb_user where name = "김성용"
select age from tb_user where name = "김성용" => 20
- 데이터 추가
insert into 테이블명 (컬럼명1,컬럼명2,...) values (데이터1,데이터2)
컬럼명1 - 데이터1
컬럼명2 - 데이터2
- 테이터 갱신
update 테이블명 set 컬럼명 = 바꾸고 싶은 데이터 where 조건식
-> where조건식을 충족하는 데이터의 컬럼명을 원하는 데이터로 갱신 ex) update tb_user set name ='기성용' where name '김성용'
ex)
- 데이터 삭제
delete from 테이블명 where 조건식
-> where 조건식을 만족하는 데이터 삭제
데이터 베이스 생성,사용,삭제
테이블 생성,삭제
데이터 추가 조회 갱신 삭제
sqld
서브쿼리,조인, 빌트인함수(집계,연산),정렬,그룹핑,관계(rdmbs),트랜잭션,PL/SQL,프로시져, 정규화,반정규화