✔ MYSQL
◼ 정보 보호의 3요소
◾ CIA Triad
▫ 기밀성(Confidentiality) : 허락되지 않은 자가 정보의 내용을 알 수 없도록 하는 것
▫ 무결성(Integrity) : 허락되지 않은 자가 정보의 내용을 임의로 수정할 수 없도록 하는 것
▫ 가용성(Availability) : 허락된 자가 정보에 접근하고자 할 때 바로 접근할 수 있는 것
◼ 파일처리시스템의 발생 가능한 문제
▫ 데이터 중복의 문제
▫ 데이터 종속의 문제
▫ 무결성 훼손의 문제
▫ 동시 접근의 문제
◼ DBMS
- 파일처리시스템의 문제를 해결하기 위해 나온 것
◾ 계층형 DBMS
- 각 계층이 트리 형태를 띠고 1:N 관계를 가짐
- 한번 구축하면 구조를 변경하기 힘듦
- 접근의 유연성이 불편함
◾ 망형 DBMS
- 1:1, 1:N, N:M 관계가 지원되어 효과적이고 빠른 데이터 추출이 가능
- 매우 복잡한 내부 포인터 사용
- 프로그래머가 모든 구조를 이해해야 프로그램을 작성할 수 있음
◾ 관계형 DBMS
- 모든 데이터는 테이블에 저장
- 테이블 간의 관계는 기본키(PK)와 외래키(FK)를 사용하여 맺음(부모, 자식 관계)
- 다른 DBMS에 비해 업무 변화에 따라 바로 순응할 수 있고 유지, 보수 측면에서도 편리
- 대용량 데이터를 체계적으로 관리할 수 있음
- 데이터의 무결성도 잘 보장됨
- 시스템 자원을 많이 차지하여 시스템이 전반적으로 느려지는 단점이 있음
◼ 트랜잭션
◼ 데이터베이스 모델링의 개념
- 데이터의 의미를 파악하고, 데이터와 관련하는 업무 프로세스를 개념적으로 정의하고 분석하는 작업
- 사용자 요구사항 분석 → 개념적 데이터 모델링 → 논리적 데이터 모델링 → 물리적 데이터 모델링 → 내부 스키마
◼ ER 모델 (Entity-개체, Relation-관계)
- 개념적 모델링 단계에서 사용하는 데이터 모델
- 개체와 개체 사이의 관계를 정형화시킨 모델
◾ 구성 요소
▫ 개체 집합
▫ 관계 집합
▫ 속성
◾ 용어
1. 개체
- 실세계에 존재하는 다른 객체와 구별되는 유무형의 사물
- 다른 개체와 구별되는 이름을 가지고 있고, 각 개체만의 고유한 특성이나 상태, 즉 속성을 하나 이상 가지고 있음
2. 개체 집합
- 같은 속성을 공유하는 개체들의 모음
3. 속성
- 개체나 관계가 가지고 있는 고유한 특성
단순 속성 | 더 작은 요소로 나눌 수 없는 속성 | ex) 학번, 이름, 등등 |
복합 속성 | 더 작은 요소로 나눌 수 있는 속성 | ex) 생년월일 |
단일값 속성 | 하나의 개체에 하나의 값만 가지는 속성 | ex) 학번, 이름, 등등 |
다중값 속성 | 하나의 개체에 여러 값을 가지는 속성 | ex) 전화번호 |
유도 속성 | 다른 속성의 값으로 유추할 수 있는 속성 | ex) 나이(생년월일로 부터 유도 가능) |
저장 속성 | 유도 속성을 위해 사용될 수 있는 속성 | 유도속성 제외 |
◾ 제약 조건
1. 사상수 (매핑 카디널리티)
- 관계 집합에 있는 개체 집합들에 대해 얼마만큼 관계를 맺을 수 있는지를 나타낸 수
1 대 1 관계 | 1:1 |
1 대 다 관계 | 1:N |
다 대 다 관계 | N:M |
2. 참여 제약 조건
전체적 참가 | 모든 개체가 관계 집합에 참여하는 조건 |
부분적 참가 | 일부 개체가 관계 집합에 참여하는 조건 |
3. 특수 관계(관계의 종속성)
강한 개체 | 약한 개체 집합과 연결되는 일반 개체 집합 |
약한 개체 | 다른 개체의 존재 여부에 의존적인 개체 |
4. 특수 속성
관계 집합의 속성 | 두 개체 집합의 관계에서 생성되는 값을 저장하는 속성 |
재귀적 관계 | 한 개체 집합이 자기 자신과 관계 집합을 형성하는 관계 |
◼ 관계 데이터 모델의 기본 용어
1. 릴레이션(테이블)
- 하나의 개체에 관한 데이터를 테이블의 구조로 저장한 것
◾ 릴레이션의 특성
a. 레코드의 유일성
- 중복된 레코드의 존재가 불가능
b. 레코드의 무순서성- 레코드의 순서는 의미 없음
c. 칼럼의 무순서성- 칼럼은 순서가 없음, 이름과 값으로 구분
d. 칼럼의 원자성- 모든 값들은 나눌 수 없는 단 하나의 원자값만 사용
◾ 릴레이션의 구성
a. 릴레이션 스키마
- 릴레이션의 논리적 구조
- 릴레이션의 이름과 릴레이션에 포함된 모든 속성의 이름으로 정의
- 자주 변하지 않음
- 아이디, 이름, 나이, 등급 → 스키마
b. 릴레이션 인스턴스
- 릴레이션에 존재하는 레코드의 집합
- 삽입, 삭제, 수정이 자주 발생
2. 속성
- 릴레이션의 열
- 필드, 칼럼
3. 레코드
- 릴레이션의 행
- 튜플
4. 차수(degree)
- 하나의 릴레이션에서 속성의 전체 개수
5. 카디널리티(cardinality)
- 하나의 릴레이션에서 레코드의 전체 개수
6. 널(Null)
- 속성 값을 모르거나 해당되는 값이 없음(아직 기록되지 않은 값)
7. 키
- 각 개체를 구별하는 데 사용되는 유일한 값을 가지는 속성의 집합
- 각 개체 인스턴스를 식별하는 데 사용되는 속성
- 개체를 찾는 역할
- 관계 집합의 특정 관계를 찾는 역할
◾ 키의 속성
유일성 : 하나의 릴레이션에서 모든 레코드는 서로 다른 키 값을 가져야 함
최소성 : 꼭 필요한 최소한의 속성들로만 키를 구성함
◾ 키의 종류
슈퍼키 | 유일성을 만족하는 속성 또는 속성들의 집합 | ex) 학번, 아이디, (학번, 아이디) |
후보키 | 유일성과 최소성을 만족하는 속성 | ex) 학번, 아이디, HP번호 |
기본키 | 후보키 중에서 기본으로 사용하기 위해 선택한 키 (Primary Key) | ex) 학번 |
대체키 | 기본키로 선택되지 않은 후보키 | ex) 아이디, HP번호 |
외래키 | 다른 릴레이션의 기본키를 참조하는 속성 (Foreign Key) | |
- 참조하는 릴레이션 : 외래키를 가진 릴레이션 | ||
- 참조되는 릴레이션 : 외래키가 참조되는 기본키를 가진 릴레이션 |
◼ 관계형 모델의 제약 조건
1. 영역 제약 조건
- 칼럼에 정의된 영역에 속한 값으로만 칼럼 값이 결정
2. 키 제약 조건
- 키는 레코드를 고유하게 구별하는 값으로 구성
3. 개체 무결성 제약 조건
- 어떠한 기본키 값도 Null이 될 수 없음
4. 참조 무결성 제약 조건
- 외래키는 반드시 존재하는 레코드의 기본키만 참조 가능
- 외래키는 Null 값을 가질 수 있음
◼ 데이터 타입
- 칼럼이 가질 수 있는 값의 범위(도메인)를 결정
- 프로그래밍 언어의 데이터 타입과 유사
▪정수
TINYINT | 1 Byte | -128 ~ 127 |
SMALLINT | 2 Byte | -32768 ~ 32768 |
INT | 4 Byte | -20억 ~ 20억 |
BIGINT | 8 Byte |
▪ 실수
고정 소수형 | 부동 소수형 | ||
DECIMAL(M,N) | 전체 M자리, 소수점 이하 N자리 | FLOAT | 4 Byte |
NUMERIC | FLOAT(P) | 소수점 이하 P개 자리 | |
DOUBLE | 8 Byte |
▪ 날짜 및 시간
날짜 데이터 타입 | |
DATE | YYYY-MM-DD |
YEAR | YYYY |
시간 데이터 타입 | |
TIME | HH:mm:ss |
날짜 및 시간 데이터 | |
DATETIME | YY-MM-DD HH:mm:ss |
TIMESTAMP |
▪ 문자
CHAR(N) | 최대 길이가 N인 고정길이 문자열 |
VARCHAR(N) | 최대 길이가 N인 가변길이 문자열 |
TEXT, CLOB | 길이가 최대 2~4GB인 가변길이 문자열 |
ENUM | 유한 개의 문자열 집합 중 하나의 값을 선택 |
ex) 성별 - ENUM('남', '여'), 혈액형 - ENUM('A', 'B', 'O', 'AB' |
◼ TABLE
- 실제 데이터를 저장하는 공간
- 테이블을 구성하는 각 속성의 이름, 데이터 타입, 기본 제약 사항을 정의
- 테이블은 스키마 안에 존재하기 때문에 스키마(Database) 생성 후 테이블 생성
◾ 제약 조건
- 테이블과 테이블에 존재하는 데이터를 보다 무결하게 관리하기 위한 목적
- 테이블 조작 시 정의된 제약 조건을 만족시키는지 지속적으로 검사
PRIMARY KEY | 기본키 지정 (UNIQUE, NOT NULL) |
FOREIGN KEY | 외래키 지정, ※ REFERENCES로 참조 릴레이션 및 컬럼명 지정 |
ex) FOREIGN KEY(키 이름) REFERENCES 테이블 이름(키 이름) | |
NOT NULL | NULL이 될 수 없음 |
UNIQUE | 동일한 칼럼 값을 가질 수 없음 |
AUTO_INCREMENT | 레코드가 추가될 때 자동적으로 index가 1부터 1씩 증가 |
CHECK | 컬럼 값이 특정 조건 준수 여부 지정 |
◼ SQL (Structured Query Language)
- RDBMS의 데이터 관리를 위해 설계된 언어
- 1986년 ANSI, 1987년 ISO에서 표준으로 제정
- 비절차적 언어, 필요한 데이터만 기술
▪ DDL (데이터 정의어, Data Definition Language)
- 데이터 베이스 내 개체를 생성, 삭제하고 그 구조를 조작하는 명령어
- 데이터가 준수해야 하는 제약 조건을 기술
- CREATE, ALTER, DROP
▫ 생성 (CREATE)
# Database 생성
CREATE DATABASE [DB 이름];
# 생성한 DATABASE 사용
USE [DB 이름];
# Table 생성
CREATE TABLE [테이블 이름] (
[속성 이름] [타입] [제약 조건]
id VARCHAR(20) PRIMARY KEY,
name VARCHAR(10) not null,
age INT not null,
);
▫ 수정 (ALTER)
# 테이블 수정(속성 추가)
ALTER TABLE [테이블 이름] ADD [추가할 속성 이름] [타입] [제약 조건];
# 테이블 수정(속성 삭제)
- 속성과 관련된 제약조건이나 참조하는 속성이 있을 경우
관련된 것 부터 삭제 후 속성 삭제 가능
ALTER TABLE [테이블 이름] DROP [속성 이름];
# 제약 조건 추가 및 삭제
ALTER TABLE [테이블 이름] ADD CONSTRAINT [제약 조건 이름] [제약 조건 내용]
ALTER TABLE [테이블 이름] DROP CONSTRAINT [제약 조건 이름]
▫ 삭제 (DROP)
# Database 삭제
DROP DATABASE [DB 이름];
# Table 삭제
DROP TABLE [테이블 이름];
▪ DML (데이터 조작어, Data Manipulation Language)
- DDL에 의해 정의된 테이블에 데이터를 조작하는 언어
- 데이터에 대한 생성, 검색, 삭제, 수정
- INSERT, UPDATE, DELETE, SELECT
▫ 삽입 (INSERT)
- 테이블에 적합한 레코드를 삽입
- 테이블에 새로운 레코드 삽입
- 모든 속성 또는 부분 속성에 대한 속성 값 삽입
# Insert문
insert into [테이블] (컬럼1, 컬럼2, 컬럼3) values(값1, 값2, 값3);
insert into Book (BookName, Publisher, Price) values ('미드의정석', '대상혁', 20000);
▫ 검색 (SELECT)
- 테이블에서 조건을 만족하는 컬럼 검색
# Select문
SELECT [ALL/DISTINCT] [속성명] FROM [테이블];
FROM : 질의를 적용할 테이블 지정
ON / WHERE : 조인 조건 / 검색할 레코드 조건 지정
GROUP BY : 레코드를 그룹화하기 위한 그룹 조건 지정
# ALL과 DISTINCT
ALL : 중복 허용(기본 값)
DISTINCT : 중복 제거
# AS
- 속성의 이름을 바꿔서 출력(별칭)
SELECT BookName AS title FROM Book;
# 조건 검색
- 조건을 만족하는 데이터만 검색
- 비교 및 논리 연산자와 함께 사용
SELECT BookName, Price FROM Book WHERE Publisher='대한미디어';
# LIKE를 이용한 문자 검색
- LIKE를 이용하여 부분적으로 일치하는 데이터 검색
- '문자열'을 이용하는 조건에만 사용 가능
- $ : 0개 이상, _ : 1개
SELECT * FROM Book WHERE LIKE '문자열%'; // 문자열로 시작
SELECT * FROM Book WHERE LIKE '$문자열'; // 문자열로 끝남
SELECT * FROM Book WHERE LIKE '$문자열$'; // 문자열이 포함됨
SELECT * FROM Book WHERE LIKE '$문자열_'; // 문자열로 시작하고 뒤에 1글자가 있음
# Null 검색
- Null 값 유무 검색
- IS NULL, IS NOT NULL 사용
SELECT * FROM Book WHERE Phone IS NULL;
SELECT * FROM Book WHERE Phone IS NOT NULL;
# 정렬 검색
- 검색 내용을 정렬해서 출력
- ORDER BY 구문 사용
- ASC(오름차순) / DESC(내림차순)
※ Null 값은 오름차순에선 맨 마지막, 내림차순에선 맨 먼저 출력
SELECT * FROM Book ORDER BY Name ASC;
# 집계함수를 이용한 검색
- 특정 속성 값을 통계적으로 계산한 결과를 검색하기 위해 사용
- WHERE 절에서는 사용할 수 없고, SELECT나 HAVING 절 에서 사용 가능
- 집계함수 계산 시 NULL 제외
COUNT : 속성 값의 개수
MAX : 속성 값의 최댓값
MIN : 속성 값의 초솟값
SUM : 속성 값의 합계
AVG : 속성 값의 평균
※ SUM, AVG는 숫자 데이터에서 사용 가능
SELECT AVG(Price) FROM Book;
# 그룹 질의
- 특정 기준으로 레코드를 그룹화 하고 각 레코드 그룹에 대해 집계 함수를 적용하는 질의
- Select 절에 그룹의 기준과 집계 함수만
SELECT 질의 GROUP BY 컬럼 HAVING 조건;
# 조인
- 2개 이상의 테이블을 연결하여 데이터를 검색하는 것
- 조인 속성 : 조인 검색을 위해 테이블을 연결해주는 속성
- 연결하려는 테이블 간 조인 속성의 이름은 달라도 되지만 도메인은 같아야 함
- 일반적으로 외래키를 조인 속성으로 이용함
- FROM 절 검색에 필요한 모든 테이블을 나열
- WHERE 절에 조인 속성의 값이 같아야 함을 의미하는 조인 조건 제시
- 속성 이름 앞에 해당 속성이 소속된 테이블의 이름을 표시
- 내부 조인 : 조인 조건을 만족하는 레코드만 결합하여 출력
- 외부 조인 : 조인 조건에 맞지 않는 레코드도 질의 결과에 출력
# 내부 조인
## 표준
SELECT 컬럼1, 컬럼2, .... FROM 테이블1 INNER JOIN 테이블2 ON 조인 조건 [WHERE 검색 조건];
또는
## 오라클
SELECT 컬럼1, 컬럼2, ... FROM 테이블1, 테이블2 WHERE 검색 조건 AND 테이블1.칼럼a = 테이블2.칼럼b;
# 외부 조인
# 부속 질의문(다중 질의문)
- SELECT 문 안에 또 다른 SELECT 문을 포함하는 질의
- 부속 질의문은 괄호로 묶어서 작성
- 부속 질의문을 먼저 수행하고 그 결과를 이용해 상위 질의문 수행
- 부속 질의문과 상위 질의문을 연결하는 연산자 필요
- 단일행(결과가 한 행) : 비교 연산자
- 다중행(결과가 여러 행)
IN 결과 중 일치하는 것이 있으면 참
NOT IN 결과 중 일치하는 것이 없으면 참
EXISTS 결과 값이 하나라도 존재하면
NOT EXISTS 결과 값이 하나도 존재하지 않으면
ALL 모두 비교한 결과가 참이면
ANY or SOME 비교한 결과가 하나라도 참이면
▫ 수정 (UPDATE)
- 조건을 만족하는 레코드의 특정 속성 값을 수정
# Update
UPDATE [테이블] SET 속성1=값1, 속성2=값2, ... (WHERE 조건);
UPDATE Book SET BookName = '롤의 정석' WHERE Publisher = '페이커';
▫ 삭제 (DELETE)
- 조건에 일치하는 레코드 집합을 테이블에서 삭제할 때 사용
- 기본키로 참조되는 경우 삭제가 안됨
# Delete
DELETE FROM [테이블] [WHERE 조건문];
▪ DCL (데이터 제어어, Data Control Language)
- 권한을 주고 회수하는 명령어
- GRANT, REVOKE
▪ TCL (트랜잭션 제어어, Transaction Control Language)
- COMMIT, ROLLBACK, SAVEPOINT
✔ MySQL WorkBench 설치
1. mysql-installer-community-8.0.17.0.msi 다운로드
설치 타입 - Custom
MySQL Server 8.0.17 -X64
MySQL Workbench 8.0.17 - x64
Samples and Examples 8.0.17 - X86
나머지 전부 Next