오토에버 클라우드 2기 5일차
데이터베이스는 효율적인 데이터 관리를 위해서 존재한다 데이터를 통합해서 관리하고 데이터 누락 및 중복 제거 여러 사용자가 공동으로 실시간 사용이 가능하다
CQRS: command query responsibility segregation의 약자로 읽기와 쓰기를 분리
삽입 수정은 RDB, 조회는 NoSQL가 빠르다
RDBMS 테이블의 집합으로 설명하는 데이터베이스 관리 시스템
NoSQL key-value, document, big table형식
DB 구성
- Relation: 테이블
- Attribute: 속성, 테이블의 열을 의미
- Domain: 속성이 가질 수 있는 값들의 집합 - 자료형이나 값의 집합
- Tuple: 테이블의 행을 의미, row나 record라고도 한다
- Cardinality: 하나의 테이블에서 행의 개수나 서로 다른 테이블 사이에 대응되는 수(하나의 테이블인 경우 행의 개수가 되지만 테이블이 2개 이상인 경우 0,1,n)
- Degree: 속성의 개수
- Constraint: 데이터 무결성을 지키기 위해서 데이터를 저장하고자 할 때 실행되는 검사 규칙
key
각 튜플을 유일하게 식별할 수 있는 속성 또는 속성의 집합
- super key: 속성의 개수에 상관없이 다른 튜플과 구분할 수 잇는 속성 또는 속성의 집합
- candidate key(후보키): 속성의 개수를 최소로 해서 구분하는 key
- primary key(기본키): 후보키 중에서 하나를 선정
- alternate key(대체키): primary key가 아닌 candidate key
- foreign key(외래키): 다른 테이블에서 튜프을 식별하기 위한 key 현재 테이블에서는 아무런 제약이 없지만 다른 테이블에서는 기본키 이거나 unique하면 된다
제약조건
- entity integrity(개체 무결성): 기본키는 null이거난 중복될 수 없음
- referential integrity(참조 무결성): 참조할 수 없는 외래키를 가지면 안됨 참조할 수 있는 값을 가지거나 null이어야 한다
SQL(structured query language)
dbms에 질의를 수행하기 위한 언어 비절차적(작성한 순서대로 실행되지 않음), 처리 단위는 튜플 각각이 아니라 튜플들 집합 단위로 처리
분류
- DDL: 데이터 구조 정의(create), 구조 수정(alter), 구조 삭제(drop), 이름 변경(rename), 데이터만 전체 삭제(truncate)
- DCL: 권한부여 (grant), 권한 취소(revoke)
- TCL: 트랜잭션 관련 명령어: commit, rollback, savepoint
- DML: 데이터 추가(insert), 데이터 수정(update), 데이터 삭제(delete)
- DQL: 데이터 조회(select)
mariaDB
SQL에 기반을 둔 관계형 DBMS로 오픈소스 소프트웨어이다 mysql을 기반으로 생성했다
데이터베이스 명령어
show databases데이터 베이스 확인create database 이름데이터 베이스 생성drop database 이름데이터 베이스 삭제use 이름데이터 베이스 사용show tables내부 테이블 확인
유저
create user 사용자계정@접속위치 identified by 비밀번호; 접속 위치는 접속하고자 하는 컴퓨터의 ip, %를 설정하면 모두 허용grant all privileges on 데이터베이스이름 to 계정@접속위치;만들어진 유저에게 권한을 부여함 데이터 베이스 이름대신.를 하면 모든 데이터 베이스가 대상이된다 이명령어 이후 데이터 베이스 재부팅 필요flush privileges
데이터 조회
select문을 통해서 데이터를 조회한다 select *(컬럼 이름) from 테이블이름
조건적으로 where, group by, having, order by를 사용한다
- where 뒤에 조건문을 작성
- group by 뒤에 그룹화할 조건 작성
- having 뒤에 group by 이후 조건을 작성
order by 컬럼 이름이나 연산식 [ASC DESC]
실행순서
from → where → group by → having → select → order by
select의 사용법
select concat(name,' ',area) from tCity;이렇게 concat을 사용해서 컬럼을 같이 표시할 수 있다
as를 사용해서 컬럼명 대신 별칭을 사용할 수 있다select distinct region from tcity;컬럼 내부 중복된 결과가 있다면 중복을 제거한다 region과 추가적으로 컬럼을 넣는다면 두개 모두 같아야 중복 제거된다
where
조회하고자 하는 데이터의 조건을 지정 이절이 생략되면 테이블의 모든 데이터를 조회
delete, update 구문에서도 사용된다
비교를 할 때 숫자는 상수를 그냥 쓰지만 문자역과 날짜 상수는 작은 따옴표로 감싸야한다 (RDBMS에 따라 생략되는 경우가 있다)
mysql과 mariadb는 저장할때 대소문자를 구분하지만 비교할 때는 대소문자 구분 X
null 데이터 조회시 is null을 이용한다
조건을 작성시 논리 연산자 AND, OR, NOT 사용 가능
like
패턴으로 부분 문자열을 검색 와일드 카드를 사용
%: 0개 이상의 문자_: 1개의 문자[문자나열]: 문자 리스트중 하나의 문자와 대응[^문자나열]: 문자 리스트에 포함되지 않은 하나의 문자와 대응
와일드 카드인 % 또는 _를 인식하게 하기 위해서는 ESCAPE 를 사용 예를 들면 ESCAPE를 &로 설정하고 와일드 카드 앞에 사용하면 된다
where sale like '%30&%' ESCAPE '&'
between
값1 between 값2 의 형태로 값1부터 값2까지 데이터를 조회한다 값1과 값2를 포함한다 이상, 이하로 생각하면 된다
where popu >= 50 and popu <=100 보다 where popu between 50 and 100이게 더 빨라서 사용함