데이터베이스
[DB] 데이터베이스 기본(정보처리기사 실기 공부 1일차)
You_mool
2024. 4. 2. 23:06
반응형
- 트랜잭션 : DBMS가 가져야 하는 특성, 하나의 논리적 기능을 수행하기 위한 작업의 기본 단위
- 원자성 : 분해가 불가능한 최소 단위, All or nothing(하나라도 실패하면 전체가 취소 되어야 함)
- 일관성 : 트랜잭션 실행 성공 후 항상 일관적 상태를 보존해야하는 특성
- 격리성 : 트랜잭션 실행 중간 결과를 다른 트랜잭션이 접근 불가
- 영속성 : 성공한 트랜잭션 결과는 영속적으로 디비에 저장
- 트랜잭션 상태 변화 :
- 활성 -> 부분 완료(Partially Committed) -> Commit -> 완료
- 활성 -> 실패 -> Rollback -> 철회
- 활성 -> 부분 완료 -> 실패 -> 철회
- 활성 : 트랜잭션 실행중
- 부분 완료 : 마지막 명령문 실행 후
- 완료 : 트랜잭션 성공 후
- 실패 : 정상적 실행 불가 상태
- 철회 : 트랜잭션이 취소되고 실행 전 상태로 환원된 상태
- 트랜잭션 제어 언어(Transaction Control Language)
- commit : 트랜잭션을 메모리에 영구적으로 저장
- rollback : 트랜잭션 내역 저장 무효화
- checkpoint : rollback 시점 지정
- 병행 제어 : 다수 사용자 환경에서 일관성 유지를 위해 상호작용 제어
- 갱신 손실(lost update) : 먼저 실행된 트랜잭션 결과를 나중에 실행된 트랜잭션이 덮어쓸 때 발생
- 현황 파악 오류(dirty read) : 중간 수행 결과를 다른 트랜잭션이 참조하여 발생
- 모순(inconsistency) : 두 트랜잭션 동시 실행
- 연쇄 복귀(cascading rollback) : 복수의 트랜잭션이 데이터 공유 시 특정 트랜잭션이 처리를 취소할 경우 트랜잭션이 처리한 곳의 부분을 취소하지 못함
- 병행 제어 기법 종류
- 로킹(locking) : 같은 자원을 액세스하는 다중 환경에서 순차적 진행을 보장하는 직렬화 기법
- 로킹 단위가 작아지면 데이터베이스 공유도, 오버헤드 증가
- 낙관적 검증 : 일단 트랜잭션 수행 하고 종료시 검증하여 디비에 반영
- Time Stamp Ordering(타임 스탬프 순서) : 트랜잭션이 실행 시작 전에 time stamp를 부여하여 부여된 시간에 따라 트랜잭션을 수행
- MVCC(multi version concurrency control) : 트랜잭션의 타임스탬프와 접근하려고 하는 데이터의 타임스탬프를 비교하여 직렬가능성이 보장되는 버전을 선택하여 접근하는 기법
- 로킹(locking) : 같은 자원을 액세스하는 다중 환경에서 순차적 진행을 보장하는 직렬화 기법
- 디비 고립화 수준(isolation level) : 다른 트랜잭션이 무결성을 해치지 않기 위해 잠금 설정하는 정도
- Read Uncommitted : 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 것 허용(연산 중인 데이터 연산 불가)
- Read Committed : 커밋된 데이터만 다른 트랜잭션이 읽기 가능
- Repetable Read : 선행 트랜잭션이 특정 데이터를 읽을 때, 트랜잭션 종료 시까지 해당 데이터에 대한 갱신/삭제 제한
- Serializable Read : 선행 트랜잭션이 특정 데이터 영역을 순차적으로 읽을 때, 해당 데이터 영역 전체에 대한 접근 제한
- 회복 기법(Recovery) : 트랜잭션을 수행하는 도중 장애로 인해 디비를 잉전 상태로 복구시키는 작업
- Deferred Update(지연 갱신) : 트랜잭션이 완료돠가 전까지 디비에 기록 안함(로그 기반)
- Immediate Update(즉각 갱신) : 트랜잭션 수행 중 갱신 결과를 바로 DB에 반영(로그 기반)
- checkpoint recovery : checkpoint 이전으로 되돌림
- shadow paging(그림자 페이징) : 트랜잭션 수행 시 사본 생성해서 복구
- Data Definition Language(데이터 정의어) : CRUD 관련 명령어
- DDL 대상
- Domain : 속성의 데이터 타입과 크기, 제약 조건 등의 정보(하나의 속성이 가질 수 있는 원자값들의 집합)
- Schema : 디비 구조, 제약조건 등의 기본적인 구조
- External Schema(외부) : 사용자나 개발자의 관점에서 디비의 논리적 구조(사용자 뷰, 서브 스키마)
- Conceptual Schema(개념) : 디비의 전체적인 논리적 구조(전체적인 뷰, 관계/제약조건/접근 권한/무결성/보안 에 대해 정의)
- Internal Schema(내부) : 물리적 저장장치의 관점에서 본 디비 구조. 실제 형식 정의, 물리적 순서 등 표현
- Table : 데이터 저장 공간
- View : 가상의 테이블
- Index : 검색 빠르게
- Table : 필드들로 구성된 데이터의 집합(= Relation, Entity)
- tuple : 테이블 내의 행(= record), 같은 값을 가질 수 없음
- Attribute : 열. 열의 개수를 Degree(차수) 라고 함
- Identifier : 여러 개의 집합체를 구분 할 수 있는 논리적 개념
- Cardinality : 튜플의 개수
- Degree : 속성의 개수
- domain : 속성의 집합
- View : 논리 테이블(테이블 A와 B를 물리 테이블이라고 하고, 뷰 C는 두 개의 테이블을 이요하여 생성한 뷰를 의미)
- 논리적으로 디비에 독립정
- 데이터 조작 간소화
- 선택되지 않은 필드 조회/접근 불가
- 뷰는 정의 변경 불가, 자체 인덱스 불가
- Index : 조회 속도 높이는 기능
- Ordered : 순서로 생성, B-Tree
- Hash : 해시 함수로 직접 데이터에 접근
- Bitmap : 적은 개수 값이 저장된 경우 선택, 수정 변경이 적을 경우 유용
- Functional : 수식이나 함수 적용
- Singled : 하나의 컬럼으로만 구성, 주 사용 컬럼이 하나일 경우 사용
- Concatnenated(결합) : where 조건 많이 쓸 때 사용
- clustered : 기본 키 기준으로 묶어서 저장
- Index Scan
- Index Range Scan : 루트에서 리프까지 수직적으로 탐색 후 필요한 리프 범위만 스캔
- Index Full Scan : 루트에서 리프를 처음부터 끝까지 수평적으로 탐색
- Index Unique Scan : 수직적으로만 탐색
- Index Skip Scan : 선두 컬럼이 조건 절에 빠졌어도 인덱스를 활용하는 방식
- DDL
- CREATE TABLE USER(
- UserId Varchar(10) PRIMARY KEY,
- Nickname Varchar(10) FOREIGN KEY REFERENCES Profie,
- KoreanId Varchar(10) UNIQUE,
- Birthdate Varchar(10) NOT NULL,
- Sex (10) CHECK(sex = 'M' OR sex = 'F'),
- createDate Varchar(10) DEFAULT SYSDATE
- ALTER TABLE User ADD PhoneNumber Varchar(11) UNIQUE;
- ALTER TABLE User MODIFY Nickname Varchar(30) NOT NULL;
- ALTER TABLE User DROP Nickname;
- DROP TABLE User;
- Cascade : 참조하는 테이블까지 모두 삭제
- Restrict : 다른 테이블이 삭제할 테이블을 참조 중이면 제거하지 않음
- TRUNCATE TABLE User;(User 테이블 내의 모든 데이터 삭제
- CREATE TABLE USER(
- View DDL
- CREATE VIEW 사원뷰 AS
- SELECT 사번, 이름
- From 사원
- Where 성별 = 'M';
- View의 SELECT 문에는 UNION이나 ORDER BY를 사용할 수 없음
- DROP VIEW User;
- DML
- SELECT 과목 (ALL : 중복 허용, DISTINCT : 중복 될 경우 하나만)
- SELECT COUNT(DISTINCT 과목)
- FROM 성적;
- WHERE 학점 = 'A';
- Score BETWEEN 80 AND 90(이상, 이하)
- WHERE Name LIKE '[ABCD]%';(이름 첫번째 문자가 A 또는 B 또는 C 또는 D
- WHERE Name LIKE '정보%';('정보'로 시작되는 문자열)
- SUM AS 급여 합계
- FROM 급여
- GROUP BY 부서;
- HAVING 급여합계 >= 5000;(group by 후에 그룹에 대한 조건 지정)
- DDL 대상
반응형