이 글은 "TCPschool/코딩과 데이터/MySQL"을 읽고 주관적으로 작성된 글입니다.
https://tcpschool.com/mysql/intro
1. MySQL 개요
- 가장 널리 사용되고 있는 관계형 데이터베이스 관리 시스템
- 오픈소스
- 다중 사용자와 다중 스레드 지원
- C, C++, Java, PHP 등 여러 언어의 API 제공
2. 데이터베이스
1) 데이터베이스란?
- 통합하여 관리되는 데이터의 집합체
- 데이터베이스 관리
- 중복된 데이터 제거
- 자료 구조화
- 효율적 처리
- 여러 업무에 여러사용자가 데이터베이스 사용 가능
- 응용 프로그램과 다르게 별도의 미들웨어에 의해 관리됨
- 데이터베이스를 관리하는 이러한 미들웨어를 RDBMS라고 함
2) 데이터베이스의 특징
- 사용자 질의에 즉각적 처리/응답
- 생성/수정/삭제로 최신 데이터 유지
- 사용자가 원하는 데이터를 동시에 공유
- 직렬성(Serializabliity)과 동시성(Concurrency)
- 직렬성 : transaction이 일정한 순서로 순차 실행되는 것
- 동시성 : transaction이 구성하는 각 쿼리문이 transaction 순서에 상관 없이 동시 실행 - 동시성의 문제
- The Lost Update Problem
- 서로 다른 transaction이 동시에 UPDATE할 경우, 한 UPDATE가 overwrite될 수 있음 - The Uncommitted Dependency Problem
1) transaction 1에서 UPDATE
2) 1)도중 SELECT
3) 2)도중 1)에서 오류 발생으로 ROLLBACK
4) 데이터 불일치 - The Inconsistent Analysis Problem
- 1.과 비슷한데, UPDATE가 손실되는게 아니라 불일치가 일어나는 경우를 말하는 듯
- The Lost Update Problem
- Serializable
- transaction들 중첩되어 실행되어도 순차 실행되는 것과 결과가 같을 때를 의미
- two-phase locking protocol에 의해 보장될 수 있음
- two-phase locking protocol : 동시성 제어를 위해 상호 배제 기능을 제공하는 기법 - 동시성 제한 수준
- Repeatable Read(RR)
- tracsaction들의 실행 순서가 모두 serializable한 것
- 하나의 레코드에 대한 lock이 transaction이 끝날 때까지 유지 - Cursor Stability(CS)
- 하나의 레코드에 대한 연산이 수행될 때 lock 설정
- 해당 레코드에 대한 연산이 끝나면 lock이 제거되는 제한 수준
- Repeatable Read(RR)
- 직렬성(Serializabliity)과 동시성(Concurrency)
https://untitledtblog.tistory.com/131
- 사용자가 데이터 주소가 아닌 원하는 데이터 내용을 따라 참조 가능
- 응용 프로그램과 데이터베이스는 독립되어 데이터의 논리적 구조와 응용 프로그램이 별도로 동작
- 데이터베이스의 논리적 독립성
- 프로그램이 변경되어도 데이터베이스의 논리적 구조는 변경되지 않음
- 데이터베이스의 논리적 독립성
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=javaking75&logNo=140164944039
3) SQL (Structured Query Language)
- 데이터베이스에서 데이터를 정의 ,조작, 제어하기 위해 사용되는 언어
- 정의, 조작, 제어 목적에 맞게 3가지로 구분
DDL (Data Definition Language) |
데이터베이스 / 테이블 등 생성, 삭제, 구조 변경 | CREATE, ALTER, DROP, ... |
DML (Data Manipulation Language) |
데이터베이스에 저장된 데이터 처리, 조회, 검색 | INSERT, UPDATE, DELETE, SELECT, ... |
DCL (Data Control Language) |
데이터베이스에 저장된 데이터의 보안성/무결성 제어 | GRANT, REVOKE, ... |
3. 관계형 데이터베이스
1) 관계형 데이터베이스란?
- 테이블로 이루어지고, 테이블은 key와 value의 관계를 나타냄
- 데이터의 종속성을 관계(relationship)로 표현하는 것이 특징
- 테이블의 구성
- 행(row) 또는 튜플(tuple) 또는 레코드(record)
- 열(column) 또는 필드(field) 또는 속성(attribute)
- 테이블은 이름을 가지며, 행 / 열 / 행과 열에 대응하는 값을 가짐
- 관계형 데이터베이스는 테이블들이 다른 테이블들과 관계를 맺고 모여있는 집합체
2) 관계형 데이터베이스의 특징
- 데이터의 분류, 정렬 탐색 속도가 빠름
- 오래 사용되어 신뢰성이 높고, 어떤 상황에서도 데이터 무결성을 보장
- 기존 스키마를 수정하기 어려움
- 데이터베이스 부하를 분석하는 것이 어려움
3) 관계형 데이터베이스 용어
- 열(column)
- 각 열은 유일한 이름 / 타입을 가짐
- 행(row)
- 관계된 데이터의 묶음을 의미
- 한 테이블의 모든 행은 같은 수의 열을 가짐
- 값(value)
- 테이블에서 행과 열에 대응하는 값
- 열의 타입과 맞는 값
- 키(key)
- 기본 키(primary key)
- 테이블에서 행의 식별자로 이용되는 열
- 후보 키 중에서 데이터베이스 설계자가 지정한 속성 - 후보 키(candidate key)
- 테이블에 저장된 레코드를 고유하기 식별 - 외래 키(foreign key)
- 한 테이블의 키 중에 다른 테이블의 행을 식별할 수 있는 키
- 기본 키(primary key)
- 관계(relationship)
- 테이블 간의 관계는 관계를 맺는 테이블 수에 따라 다음과 같이 나뉨
- 일대일 관계
- 일대다 관계
- 다대다 관계
- 이러한 관계를 나타내기 위해 외래 키(foreign key) 사용
- 테이블 간의 관계는 관계를 맺는 테이블 수에 따라 다음과 같이 나뉨
- 스키마(schema)
- 테이블을 디자인하기 위한 청사진
- 테이블의 각 열에 대한 항목 / 타입 / 기본 키 / 외래 키를 나타내야함
- 개체-관계 다이어그램(entity-relationship diagram)이나 문자열로 표현
- Reservation(ID, Name, Date, RoomNum)
4. MySQL 소개
1) MySQL이란?
- 가장 널리 사용되고 있는 RDBMS (Oracle DB가 가장 많이 사용하는 듯)
- 오픈소스, 다중 사용자 및 다중스레드, 다양한 언어 API 제공
- 유닉스, 리눅스, 윈도우 등 다양한 운영체제 지원
- 특히 PHP와 함께 웹 개발에 자주 사용 (WAMP, LAMP)
- 오픈소스 라이센스지만 상업 용도는 상업용 라이센스 구입 필요
2) MySQL의 장점
- 오픈소스로 무료
- 다양한 운영체제 / 언어
- 큰 데이터 집합에도 빠르고 효과적
- 표준 SQL 형식 사용
- MySQL 응용 프로그램을 사용자 용도에 맞게 수정 가능
3) MySQL의 역사
- 생략
'CS > MySQL' 카테고리의 다른 글
[프로그래머스][SQL][SELECT] 모든 레코드 조회하기 (0) | 2021.08.06 |
---|---|
[TCPschool][4장] 연산자와 함수 (0) | 2021.08.06 |
[TCPschool][3장] 타입 (0) | 2021.08.04 |
[TCPschool][2장] MySQL 문법(2/2) (0) | 2021.08.01 |
[TCPschool][2장] MySQL 문법 (1/2) (0) | 2021.07.28 |