트랜잭션(Transaction): 인가받지 않은 사용자로부터 데이터를 보장하기 위해 DBMS가 가져야 하는 특성이자, 데이터베이스 시스템에서 하나의 논리적 기능을 정상적으로 수행하기 위한 작업의 기본 단위이다.
트랙잭션 특성 (A/C/I/D)
특성 | 설명 | 주요기법 |
원자성(Atomicity) | 분해가 불가능한 작업의 최소단위 연산 전체가 성공 또는 실패 하나라도 실패할 경우 전체가 취소되어야 하는 특성 |
Commit/Rollback 회복성 보장 |
일관성(Consistency) | 트랜잭션이 실행 성공 후 항상 일관된 데이터베이스 상태를 보존해야 하는 특성 | 무결성 제약조건 동시성 제어 |
격리성(Isolation) | 트랜잭션이 실행 중 생성하는 연산의 중간 결과를 다른 트랜잭션이 접근 불가능한 특성 | Read Uncommited Read Commited Repeatable Read Serializable |
영속성(Durability) | 성공이 완료된 트랜잭션의 결과는 영속적으로 데이터베이스에 저장하는 특성 | 회복기법 |
트랜잭션 상태 변화 (활/부/완/실/철)
- 활동 상태(Active): 초기 상태, 트랜잭션이 실행 중일 때 가지는 상태
- 부분 완료 상태(Partially Committed): 마지막 명령문이 실행된 후에 가지는 상태
- 완료 상태(Committed): 트랜잭션이 성공적으로 완료된 후 가지는 상태
- 실패 상태(Failed): 정상적인 실행이 더 이상 진행될 수 없을 때 가지는 상태
- 철회 상태(Aborted): 트랜잭션이 취소되고 데이터베이스가 트랜잭션 시작 전 상태로 환원된 상태
트랜잭션 제어언어: 트랜잭션 제어 언어는 TCL(Transaction Control Language)라고 하며, 트랜잭션의 결과를 허용하거나 취소하는 목적으로 사용되는 언어를 지칭한다.
TCL 명령어 (커/롤/체)
명령어 | 핵심 | 설명 |
커밋(COMMIT) | 트랜잭션 확정 | 트랜잭션을 메모리에 영구적으로 저장하는 명령어 |
롤백(ROLLBACK) | 트랜잭션 취소 | 트랜잭션 내역을 저장 무효화시키는 명령어 |
체크포인트(CHECKPOINT) | 저장 시기 설정 | ROLLBACK을 위한 시점을 지정하는 명령어 |
병행 제어(Concurrency Control): 병행 제어는 다수 사용자 환경에서 여러 트랜잭션을 수행할 때, 데이터베이스 일관성 유지를 위해 상호작용을 제어하는 기법이다.
병행 제어 미보장 시 문제점 (갱/현/모/연)
- 갱신 손실(Lost Update): 먼저 실행된 트랜잭션의 결과를 나중에 실행된 트랜잭션이 덮어쓸 때 발생하는 오류
- 현황 파악오류(Dirty Read): 트랜잭션의 중간 수행 결과를 다른 트랜잭션이 참조하여 발생하는 오류
- 모순성(Inconsistency): 두 트랜잭션이 동시에 실행되어 데이터베이스의 일관성이 결여되는 오류
- 연쇄복귀(Cascading Rollback): 복수의 트랜잭션이 데이터 공유 시 특정 트랜잭션이 처리를 취소할 경우 트랜잭션이 처리한 곳의 부분을 취소하지 못하는 오류
병행 제어 기법의 종류
- 로킹(Locking): 같은 자원을 액세스하는 다중 트랜잭션 환경에서 DB의 일관성과 무결성을 유지하기 위해 트랜잭션의 순차적 진행을 보장하는 직렬화 기법
- 낙관적 검증: 트랜잭션이 어떠한 검증도 수행하지 않고 일단 트랜잭션을 수행하고 트랜잭션 종료 시 검증을 수행하여 데이터베이스에 반영하는 기법
- 타임 스탬프 순서(Time Stamp Ordering): 트랜잭션과 트랜잭션이 읽거나 갱신한 데이터에 대해 트랜잭션이 실행을 시작하기 전에 타임 스탬프를 부여하여 부여된 시간에 따라 트랜잭션 작업을 수행하는 기법
- 다중버전 동시성 제어(MVCC; Multi Version Concurrency Control): 트랜잭션의 타임스탬프와 접근하려는 데이터의 타임스탬프를 비교하여 직렬가능성이 보장되는 적절한 버전을 선택하여 접근하도록 하는 기법
고립화 수준(Isolation Level): 고립화 수준은 다른 트랜잭션이 현재의 데이터에 대한 무결성을 해치지 않기 위해 잠금을 설정하는 정도이다.
고립화 수준 종류
- Read Uncommitted: 한 트랜잭션에서 연산(갱신) 중인(아직 커밋되지 않은) 데이터를 다른 트랜잭션이 읽는 것을 허용하는 수준; 연산(갱신)중인 데이터에 대한 연산은 불허
- Read Committed: 한 트랜잭션에서 연산(갱신)을 수행할 때, 연산이 완료될 때까지 연산 대상 데이터에 대한 읽기를 제한하는 수준; 연산이 완료되어 커밋된 데이터는 다른 트랜잭션이 읽는 것을 허용
- Repeatabel Read: 선행 트랜잭션이 특정 데이터를 읽을 때 트랜잭션 종료 시까지 해당 데이터에 대한 갱신 삭제를 제한하는 수준
- Serializable Read: 선행 트랜잭션이 특정 데이터 영역을 순차적으로 읽을 때, 해당 데이터 영역 전체에 대한 접근 제한하는 수준
회복 기법(Recovery): 트랜잭션을 수행하는 도중 장애로 인해 손상된 데이터베이스를 손상되기 이전의 상태로 복구시키는 작업이다.
회복기법 종류 (회/로/체/그)
기법 | 설명 |
로그 기반 회복 기법 | 지연 갱신 회복 기법과 즉각 갱신 회복 기법이 있음 지연 갱신 회복 기법(Deferred Update): 트랜잭션이 완료되기 전까지 데이터베이스에 기록하지 않는 기법 즉각 갱신 회복 기법(Immediate Update): 트랜잭션 수행 중 갱신 결과를 바로 DB에 반영하는 기법 |
체크 포인트 회복 기법(Checkpoint Recovery) | 장애 발생 시 검사점 이후에 처리된 트랜잭션에 대해서만 장애 발생 이전의 상태로 복원시키는 회복 기법 |
그림자 페이징 회복 기법(Shadow Paging Recovery) | 데이터베이스 트랜잭션 수행 시 복제본을 생성하여 데이터베이스 장애 시 이를 이용해 복구하는 기법 |
데이터 정의어(DDL; Data Definition Language): 데이터를 정의하는 언어로서 '데이터를 담는 그릇을 정의하는 언어'이다. 테이블과 같은 데이터 구조를 정의하느 데 사용되는 명령어들로 특정 구조를 생성, 변경, 삭제, 이름을 바꾸는 데이터 구조와 관련된 명령어들을 데이터 정의어라고 부른다.
DDL대상 (도/스/테/뷰/인)
DDL 대상 | 설명 |
도메인(Domain) | 하나의 속성이 가질 수 있는 원자값들의 집합 속성의 데이터 타입과 크기, 제약조건 등의 정보 |
스키마(Schema) | 데이터베이스의 구조, 제약조건 등의 정보를 담고 있는 기본적인 구조 외부 스키마(External Schema): 사용자나 개발자의 관점에서 필요로 하는 데이터베이스의 논리적 구조; 사용자 뷰를 나타냄; 서브 스키마로 불림 개념 스키마(Conceptual Schema): 데이터베이스의 전체적인 논리적 구조; 전체적인 뷰를 나타냄; 개체 간의 관계, 제약조건, 접근 권한, 무결성, 보안에 대해 정의 내부 스키마(Internal Schema): 물리적 저장장치의 관점에서 보는 데이터베이스 구조; 실제로 데이터베이스에 저장될 레코드의 형식을 정의하고 저장 데이터 항목의 표현 방법, 내부 레코드의 물리적 순서 등을 표현 |
테이블(Table) | 데이터 저장 공간 |
뷰(View) | 하나 이상의 물리 테이블에서 유도되는 가상의 테이블 |
인덱스(Index) | 검색을 빠르게 하기 위한 데이터 구조 |
테이블 관련 용어
- 튜플(Tuple)/행(Row)
- 테이블 내의 행을 의미하며 레코드(Record)라고도 함
- 튜플은 릴레이션(Relation)에서 같은 값을 가질 수 없음
- 애트리뷰트(Attribute)/열(Column)
- 테이블 내의 열을 의미
- 열의 개수를 차수(Degree)라고 함
- 식별자(Identifier)
- 여러 개의 집합체를 담고 있는 관계형 데이터베이스에서 각각의 구분할 수 있는 논리적인 개념
- 카디널리티(Cardinality): 튜플(Tuple)의 개수 (행 개수)
- 차수(Degree): 애트리뷰트(Attribute)의 개수 (열 개수)
- 도메인(Domain): 하나의 애트리뷰트가 취할 수 있는 같은 타입의 원자값 들의 집합
뷰(View)의 특징
- 논리적 데이터 독립성 제공: 데이터베이스에 영향을 주지 않고 애플리케이션이 원하는 형태로 데이터에 접근 가능
- 데이터 조직 연산 간소화: 애플리케이션이 원하는 형태의 논리적 구조를 형성하여 데이터 조작 연산을 간소화
- 보안 기능 제공: 특정 필드만을 선택해 뷰를 생성할 경우 애플리케이션은 선택되지 않은 필드의 조회 및 접근 불가
- 뷰 변경 불가: 뷰 정의는 ALTER문을 이용하여 변경할 수 없음; 뷰를 생성할 때는 CREATE, 제거할 때는 DROP문을 사용.
뷰의 목적: 뷰를 사용하는 주된 이유는 단순 질의어를 사용할 수 있기 때문이다.
뷰의 장점: 논리적 독립성 제공, 사용자 데이터 관리 용이, 데이터 보안의 용이
뷰의 단점: 뷰 자체 인덱스 불가, 뷰 정의 변경 불가, 데이터 변경 제약 존재
인덱스(Index): 인덱스는 데이터를 빠르게 찾을 수 있는 수단으로서, 테이블에 대한 조회 속도를 높여주는 자료 구조이다.
인덱스 종류 (순/해/비/함/단/결/클)
- 순서 인덱스(Ordered Index)
- 데이터가 정렬된 순서로 생성되는 인덱스
- B-Tree 알고리즘 활용
- 해시 인덱스(Hash Index)
- 해시 함수에 의해 직접 데이터에 키 값으로 접근하는 인덱스
- 데이터 접근 비용이 균일, 튜플양에 무관
- 비트맵 인덱스(Bitmap Index)
- 각 컬럼에 적은 개수 값이 저장된 경우 선택하는 인덱스
- 수정 변경이 적을 경우 유용
- 함수기반 인덱스(Functional Index)
- 수식이나 함수를 적용하여 만든 인덱스
- 단일 인덱스(Singled Index)
- 하나의 컬럼으로만 구성한 인덱스
- 주 사용 컬럼이 하나일 경우 사용
- 결합 인덱스(Concatenated Index)
- 두 개 이상의 컬럼으로 구성한 인덱스
- WHERE조건으로 사용하는 빈도가 높은 경우 사용
- 클러스터드 인덱스(Clustered Index)
- 기본 키(PK) 기준으로 레코드를 묶어서 저장하는 인덱스
- 저장 데이터의 물리적 순서에 따라 인덱스가 생성
- 특정 범위 검색 시 유리함
DDL명령어 (크/알/드/트)
구분 | DDL명령어 | 설명 |
생성 | CREATE | 데이터베이스 오브젝트 생성하는 명령어 |
수정 | ALTER | 데이터베이스 오브젝트 변경하는 명령어 |
삭제 | DROP | 데이터베이스 오브젝트 삭제하는 명령어 |
TRUNCATE | 데이터베이스 오브젝트 내용 삭제하는 명령어 |
테이블 관련 명령어
CREATE TABLE: 테이블을 생성하는 명령이다.
CREATE TABLE 테이블명
(
컬럼명 데이터타입 [제약조건],
...
);
CREATE TABLE 제약조건
- PRIMARY KEY: 테이블의 기본키를 정의
- FOREIGN KEY: 외래키를 정의
- UNIQUE: 테이블 내에서 얻은 유일한 값을 갖도록 하는 제약조건
- NOT NULL: 해당 컬럼은 NULL값을 포함하지 않도록 하는 제약조건
- CHECK: 개발자가 정의하는 제약조건; 참(TRUE)여야 하는 조건을 지정
- DEFAULT: 데이터를 INSERT할 때 해당 컬럼의 값을 넣지 않는 경우 기본값으로 설정해 주는 제약조건
ALTER TABLE: 테이블을 수정하는 명령이다.
ALTER TABLE 테이블명 ADD 컬럼명 데이터타입 [제약조건]; --컬럼 추가
ALTER TABLE 테이블명 MODIFY 컬럼명 데이터타입 [제약조건]; --컬럼 수정
ALTER TABLE 테이블명 DROP 컬럼명; --컬럼 삭제
DROP TABLE: 테이블을 삭제하는 명령이다.
옵션에는 CASCADE와 RESTRICT옵션이 있다.
- CASCADE: 참조하는 테이블까지 연쇄적으로 제거하는 옵션
- RESTRICT: 다른 테이블이 삭제할 테이블을 참조중이면 제거하지 않는 옵션
DROP TABLE 테이블명 [CASCADE|RESTRICT];
TRUNCATE TABLE: 테이블 내의 데이터들을 삭제하는 명령이다.
TRUNCATE TABLE 테이블명; --테이블명 내의 모든 데이터 삭제(테이블 삭제는 아님)
VIEW 관련 DDL
CREATE VIEW: 뷰를 생성하는 명령이다.
VIEW테이블의 SELECT문에는 UNIION이나 ORDER BY절을 사용할 수 없다.
CREATE VIEW 사원뷰 AS
SELECT 사번, 이름
FROM 사원
WHERE 성별 = 'M';
--사원 테이블에서 성별 값이 M을 가진 사번, 이름으로 생성된 사원뷰라는 이름의 뷰 생성
CREATE OR REPLACE VIEW: 뷰를 교체하는 명령이다. CREATE VIEW와 사용 방법이 동일하다. (CREATE대신 CREATE OR REPLACE VIEW로만 교체함)
DROP VIEW: 뷰를 삭제하는 명령이다.
DROP VIEW 뷰이름;
※뷰는 수정(ALTER)할 수 없기 때문에 삭제(DROP)하거나 CREATE OR REPLACE VIEW명령을 통해 뷰를 교체해야합니다.
INDEX관련 DDL
CREATE INDEX: 인덱스를 생성하는 명령이다.
CREATE INDEX 사번인덱스 ON 사원(사번);
--사원 테이블의 사번 컬럼에 대해 사번인덱스라는 인덱스 명으로 인덱스 생성
ALTER INDEX: 인덱스를 수정하는 명령이다; 기존 인덱스를 삭제하고 신규 인덱스를 생성하는 방식으로 사용을 권고한다.
ALTER INDEX 사번인덱스 ON 사원(사번);
--사원테이블의 사번컬럼에 대해 사번인덱스라는 인덱스명으로 인덱스 생성
DROP INDEX: 인덱스를 삭제하는 명령이다.
DROP INDEX 사번인덱스;
--사번인덱스라는 인덱스 명을 가지고 있는 인덱스를 삭제
데이터 조작어(DML; Data Manipulation Language): 데이터 조작어는 데이터베이스에 저장된 자료들을 입력, 수정, 삭제, 조회하는 언어이다.
DML명령어 유형
유형 | 동작 | 설명 |
SELECT | 조회 | 테이블 내 칼럼에 저장된 데이터를 조회 |
INSERT | 삽입 | 테이블 내 칼럼에 데이터를 추가 |
UPDATE | 갱신 | 테이블 내 칼럼에 저장된 데이터를 수정 |
DELETE | 삭제 | 테이블 내 칼럼에 저장된 데이터를 삭제 |
SELECT: 데이터의 내용을 조회할 때 사용하는 명령어이다.
SELECT [ALL|DISTINCT] 속성명1, 속성명2,...
FROM 테이블명1, ...
[WHERE 조건]
[GROUP BY 속성명1, ..]
[HAVING 그룹조건]
[ORDER BY 속성 [ASC|DESC]];
SELECT 명령어
구분 | 설명 |
SELECT 절 | 검색하고자 하는 속성명, 계산식을 기술 속성명 별칭은 AS를 사용하며 생략 가능함 2개 이상의 테이블을 대상으로 검색할 때는 '테이블명.속성명'으로 표현 ALL: 모든 튜플을 검색할 때 사용(default) DISTINCT: 중복된 속성이 조회될 경우 그 중 한 개만 검색 |
FROM 절 | 질의에 의해 검색될 데이터들을 포함하는 테이블명을 기술 |
WHERE 절 | 검색할 조건을 기술 |
GROUP BY 절 | 속성값을 그룹으로 분류하고자 할 때 사용 |
HAVING 절 | GROUP BY에 의해 분류한 후 그룹에 대한 조건 지정 |
ORDER BY 절 | 속성값을 정렬하고자 할 때 (ASC: 오름차순, DESC: 내림차순)사용 |
조인(Join): 조인은 두 개 이상의 테이블을 연결하여 데이터를 검색하는 방법이다.
논리적 조인 유형
- 내부 조인(Inner Join): 공통 존재 컬림의 값이 같은 경우를 추출하는 기법
- 외부 조인(Outer Join)
- 왼쪽 외부 조인(Left Outer Join): 왼쪽 테이블의 모든 데이터와 오른쪽 테이블의 동일 데이터를 추출하는 기법
- 오른쪽 외부 조인(Right Outer Join): 오른쪽 테이블의 모든 데이터와 왼쪽 테이블의 동일 데이터를 추출하는 기법
- 완전 외부 조인(Full Outer Join): 양쪽의 모든 데이터를 추출하는 기법
- 교차 조인(Cross Join): 조인 조건이 없는 모든 데이터 조합을 추출하는 기법
- 셀프 조인(Self Join): 자기 자신에게 별칭을 지정한 후 다시 조인하는 기법
INSERT: 데이터의 내용을 삽입할 때 사용하는 명령이다.
INSERT INTO 학생(학번, 성명, 학년, 수강과목)
VALUES(1234, '홍길동', 1, '수학');
--[학생]테이블에 학번이 1234, 성명: '홍길동' 학년:1, 수강과목: '수학'인 학생을 삽입
UPDATE: 데이터의 내용을 변경할 때 사용하는 명령이다.
UPDATE 학생
SET 주소 = '서울'
WHERE 이름 = '홍길동';
--[학생]테이블에 홍길동의 주소를 서울로 수정
DELETE: 데이터의 내용을 삭제할 때 사용하는 명령어이다.
DELETE FROM 학생
WHERE 이름 = '홍길동'
--[학생]테이블에 홍길동에 대한 튜플을 삭제
데이터 제어어 (DCL; Data Control Language): 데이터 제어어는 데이터베이스 관리자가 데이터 보안, 무결성 유지 병행제어, 회복을 위해 관리자(DBA)가 사용하는 제어용 언어이다.
DCL의 유형
- GRANT
(그온투)- 사용자 권한 부여
- 관리자(DBA)가 사용자에게 데이터베이스에 대한 권한을 부여하는 명령어
-
GRANT 권한 ON 테이블 TO 사용자; GRANT UPDATE ON 학생 TO 홍길동; --관리자가 홍길동에게 [학생]테이블에 대해 UPDATE할 수 있는 권한 부여
- REVOKE
(리온프)- 사용자 권한 취소
- 관리자(DBA)가 사용자에게 부여했던 권한을 회수하기 위한 명령어
-
REVOKE 권한 ON 테이블 FROM 사용자 REVOKE UPDATE ON 학생 FROM 홍길동; --관리자가 사용자 홍길동에게 [학생]테이블에 대해 UPDATE할 수 있는 권한을 회수
'공부 > 정보처리기사' 카테고리의 다른 글
[12] 서버 프로그램 구현 (개발 환경, 형상 관리, 모듈) (0) | 2021.10.10 |
---|---|
[11-1] 절차형 SQL (0) | 2021.10.09 |
[10] 프로그래밍 언어 활용 ,포인터, 오버로딩, 오버라이딩 (0) | 2021.10.06 |
[9] 인터페이스 구현 (0) | 2021.10.04 |
[8] 연계 데이터 구성, 연계 메커니즘, EAI / ESB (0) | 2021.10.03 |
댓글