논리적 기능을 정상적으로 수행하기 위한 작업의 기본 단위
트랜잭션 특성 (ACID)
1) 원자성 : 연산 전체가 정상적으로 실행
2) 일관성 : 트랜잭션 수행 전과 수행 완료 후 상태가 같아야 한다.
3) 격리성=고립성 : 트랜잭션이 서로 영향을 미치지 않아야 한다.
4) 영속성 : 결과는 영속적으로 데이터베이스에 저장
트랜잭션 제어 TCL
1) 커밋(COMMIT) : 메모리에 영구적으로 저장
2) 롤백(ROLLBACK) : 트랜잭션 저장 무효화
3) 체크포인트(CHECKPOINT) : ROLLBACK을 위한 시점을 지정
병행제어 기법의 종류
로킹(Locking) : 다른 트랜잭션이 동시에 접근하지 못하도록 상호배제기능을 제공
낙관적 검증 : 일단 트랜잭션을 수행하고, 종료시 검증을 수행해야 한다.
타임 스탬프 순서 : 타임스탬프를 부여하고 부여된 시간에 따라 트랜잭션 작업을 수행
다중버전 동시성 제어 : 직렬가능성이 보장되는 적절한 버전을 선택하여 접근
회복기법(영속성 주요 기법)
트랜잭션 중간 장애로 인해 손상된 DB를 손상되기 이전의 정상적인 상태로 복구시키는 작업
회복기법 종류
1) REDO : 데이터베이스 내용이 손상된 경우, 가장 최근의 복제본으로 재작업을 하는 기법
가장 최근의 복제본을 적재한 후 일어난 변경만을 로그를 이용하여 재실행함으로써 데이터베이스를 복원
2) UNDO : 트랜잭션들이 작업한 변경 내용들을 모두 취소하는 기법이다. 모든 변경 내용을 취소하여 복원
로그 기반 회복 기법
1) 지연 갱신 회복 기법 : 트랜잭션이 완료되기 전까지 DB에 기록하지 않는 기법
2) 즉각 갱신 회복 기법 : 트랜잭션 수행 중 갱신 결과를 바로 DB에 반영하는 기법
체크 포인트 회복 기법
검사점 이후에 처리된 트랜잭션에 대해서만 장애 발생 이전의 상태로 복원
그림자 페이징 회복 기법
데이터베이스 트랜잭션 수행 시 복제본을 생성하여 데이터베이스 장애 시 이를 이용해 복구하는 기법
데이터를 담는 그릇을 정의하는 언어, 특정 구조를 생성, 변경, 삭제, 이름을 바꾸는 데이터 구조와 관련된 명령어를 데이터 정의어라고 부른다.
- DDL 대상
1) 도메인 : 하나의 속성이 가질 수 있는 원자값들의 집합
2) 스키마 : 데이터베이스 구조, 제약조건 등 정보를 담고 있는 기본적인 구조
외부스키마 : 사용자나 개발자의 관점에서 논리적 구조, 사용자 뷰, 서브 스키마로 불린다.
개념스키마 : 데이터베이스의 전체적인 논리적 구조,
내부스키마 : 물리적 저장 장치의 관점, 내부 레코드의 물리적 순서
3) 테이블 : 데이터 저장 공간
4) 뷰 : 하나 이상의 물리 테이블에서 유도되는 가상의 테이블
5) 인덱스 : 검색을 빠르게 하기 위한 데이터 구조
1) CREATE : 데이터베이스 오브젝트 생성하는 명령어
2) ALTER : 데이터베이스 오브젝트 변경하는 명령어
3) DROP : 데이터베이스 오브젝트 삭제하는 명령어
4) TRUNCATE : 데이터베이스 오브젝트 내용 삭제하는 명령어
테이블 : 릴레이션, 엔터티라고 불린다.
튜플 / 행 : 테이블 내의 행을 의미하며 레코드라고 한다.
카디널리티 : 튜플의 개수
애트리뷰트 / 열 : 테이블 내의 열을 의미, 열의 개수를 디그리라고 한다.
차수 : 애트리뷰트의 개수
식별자 : 여러 개의 집합체를 담고 있는 관계형 데이터베이스에서 각각의 구분할 수 있는 논리적인 개념
도메인 : 하나의 애트리뷰트가 취할 수 있는 같은 타입의 원자값들의 집합
뷰 : 논리 테이블로서 사용자에게 테이블과 동일, 조인 기능 사용 가능,
But, ALTER문을 이용하여 변경 불가능하다.
CREATE문, DROP문 사용 가능
단순 질의어를 사용할 수 있다.
인덱스 : 검색 연산의 최적화를 위해 데이터베이스 내 값에 대한 주소 정보로 구성된 데이터 구조이다.
1) CREATE TABLE
CREATE TABLE 테이블명
(
컬럼명 데이터타입 PRIMARY KEY, --기본키 설정
컬럼명 데이터타입 FOREIGN KEY REFERENCES 참조테이블(기본키), -- 외래키 설정
컬럼명 데이터타입 UNIQUE,
컬럼명 데이터타입 NOT NULL,
컬럼명 데이터타입 CHECK(조건식), --제약조건 설정
컬럼명 데이터타입 DEFAULT 값
);
PRIMARY KEY : 기본키
FOREIGN KEY : 외래 키를 정의 참조 대상을 테이블로 명시
UNIQUE : 유일한 값을 갖도록 하는 제약조건
NOT NULL : 해당 컬럼은 NULL값을 포함하지 않도록 하는 제약조건
CHECK : 개발자 정의, 참(TRUE)이어야 하는 조건을 지정
DEFAULT : 데이터 INSERT시 해당 컬럼의 값을 넣지 않는 경우 기본값으로 설정
2) ALTER TABLE 테이블을 수정하는 명령어
ALTER TABLE 테이블명 ADD 컬럼명 데이터타입 [제약조건];
ALTER TABLE 사원 ADD 전화번호 VARCHAR(11) UNIQUE;
MODIFY : 컬럼을 수정하는 문법
DROP COLUMN : 테이블에 필요한 컬럼을 삭제하는 문법
3) DROP TABLE 테이블 삭제
DROP TABLE 테이블명 [CASCADE | RESTRICT];
CASCADE와 RESTRICT의 경우 외래키(FOREIGN KEY)가 걸려 있을 때 해당한다.
CASCADE : 참조하는 테이블까지 연쇄적으로 제거
RESTRICT : 다른 테이블이 삭제할 테이블을 참조 중이면 제거하지 않는다.
4) TRUNCATE TABLE 테이블 내의 데이터 삭제 O 테이블 삭제 X
ex. TRUNCATE TABLE 테이블명;
CREATE VIEW 뷰이름 AS
조회쿼리;
CREATE VIEW 사원뷰 AS
SELECT 사번, 이름
FROM 사원
WHERE 성별 = 'M';
2) CREATE OR REPLACE VIEW : 뷰를 교체하는 명령이다.
CREATE OR REPLACE VIEW 뷰이름 AS 조회쿼리;
3) DROP VIEW : 뷰를 삭제하는 명령이다.
DROP VIEW 뷰이름;
2) ALTER INDEX
ALTER [UNIQUE] INDEX 인덱스명 ON 테이블명(컬럼명1, 컬럼명2, ...);
ex. ALTER INDEX 사번인덱스 ON 사원(사번);
3) DROP INDEX
DROP INDEX 인덱스를 삭제하는 명령어이다.
ex. DROP INDEX 사번인덱스;
데이터베이스에 저장된 자료들을 입력, 수정, 삭제, 조회하는 언어이다.
DML 명령어 (세인업데로 외우기!)
1) SELECT : 테이블 내의 칼럼에 저장된 데이터를 조회
2) INSERT : 테이블 내 칼럼에 데이터를 추가
3) UPDATE : 테이블 내 칼럼에 저장된 데이터를 수정
4) DELETE : 테이블 내 칼럼에 저장된 데이터를 삭제
SELECT 명령문 순서
SELECT [ALL | DISTINCT] 속성명1, 속성명2...
FROM 테이블명1, ...
WHERE 조건
GROUP BY 속성명1, ...
HAVAING 그룹조건
ORDER BY 속성 ASC | DESC;
SELECT 절
ALL : 모든 튜플을 검색할 때 사용
DISTINCT : 중복된 속성이 조회될 경우 그중 한 개만 검색한다.
COUNT(DISTINCT) : 중복된 값을 제거한 튜플의 개수를 출력
FROM 절
검색될 데이터를 포함하는 테이블명
WHERE 절
검색할 조건
1) 비교 : =, <>, !=, >=, <=
2) 범위 : 칼럼 BETWEEN 값1 AND 값2, 컬럼 >= 값1 AND 컬럼 <= 값2
3) 집합 : 칼럼 IN (값1, 값2, ...) 칼럼 NOT IN (값1, 값2, ...)
4) 패턴 : 칼럼 LIKE 패턴
% : 0개 이상의 문자열과 일치
ex. '데%' 데로 시작되는 문자열 검색
[ ] : 1개의 문자와 일치
ex. '[ABCD]' 'A','B','C','D'인 문자열과 일치하는 문자열 검색
[^] : 1개의 문자와 불일치
_ : 특정 위치의 1개의 문자와 일치
5) NULL
6) 복합조건 : AND, OR, NOT 조건
GROUP BY 절
속성값을 그룹으로 분류할 때 사용
HAVING 절
GROUP BY에 의해 분류한 후 그룹에 대한 조건을 지정할 때
ex. GROUP BY 직책, 부서
HAVING 급여합계 >= 5000;
ORDER BY 절
속성값을 정렬할 때 [ASE | DESC] 기본값은 오름차순이다.
두개 이상의 테이블을 연결하여 데이터를 검색하는 방법이다.
SELECT A.컬럼1, A.컬럼2, B.컬럼1, B.컬럼2
FROM 테이블1 A [INNER] JOIN 테이블2 B
ON 조인조건
[WHERE 검색조건];
SELECT A.컬럼1, A.컬럼2, B.컬럼1, B.컬럼2
FROM 테이블1 A LEFT [OUTER] JOIN 테이블2 B
ON 조인조건
[WHERE 검색조건]
2) 오른쪽 외부 조인 (Right Outer Join) : 오른쪽 테이블의 모든 데이터, 왼쪽 테이블의 동일 데이터 추출하는 기법
SELECT A.컬럼1, A.컬럼2, B.컬럼1, B.컬럼2
FROM 테이블1 A RIGHT [OUTER] JOIN 테이블2 B
ON 조인조건
[WHERE 검색조건]
3) 완전 외부 조인 (Full Outer Join) : 양쪽의 모든 데이터를 추출하는 기법
SELECT A.컬럼1, A.컬럼2, B.컬럼1, B.컬럼2
FROM 테이블1 A FULL [OUTER] JOIN 테이블2 B
ON 조인조건
[WHERE 검색조건]
SELECT 컬럼1, 컬럼2
FROM 테이블1 CROSS JOIN 테이블2
SELECT A.컬럼1, A.컬럼2, B.컬럼1, B.컬럼2
FROM 테이블1 A [INNER] JOIN 테이블1 B
ON 조인조건
[WHERE 검색조건]
SQL문 안에 포함된 또 다른 SQL문이다. 서브쿼리에 사용되는 컬럼 정보는 메인쿼리의 컬럼 정보를 사용할 수 있지만, 역으로 성립하지 않는다.
SELECT MAX(가격) AS 가격
FROM 도서가격 A,
(SELECT 책번호
FROM 도서
WHERE 책명='자료구조') B
WHERE A.책번호 = B.책번호
2) WHERE 절 서브쿼리 : WHERE절 안에 들어있는 형태, 중첩 서브쿼리 라고 불린다.
SELECT MAX(가격) AS 가격
FROM 도서가격
WHERE 책번호 IN (SELECT 책번호
FROM 도서
WHERE 책명='자료구조');