1. 트랜잭션 : 데이터베이스 시스템에서 하나의 논리적 기능을 정상적으로 수행하기 위한 작업의 기본단위
- 트랜잭션의 특성 : 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 영속성(Durability)
- 원자성 : 트랜잭션을 구성하는 연산 전체가 모두 정상적으로 실행되거나 모두 취소되어야 하는 성질
- 일관성 : 트랜잭션 수행 전과 수행 완료 후의 상태가 같아야 하는 성질
- 격리성 = 고립성 : 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않아야 한다는 성질
- 영속성 : 성공이 완료된 트랜잭션의 결과는 영속적으로 데이터베이스에 저장되어야 하는 성질
2. 트랜잭션 제어 : 트랜잭션 제어언어는 TCL(Transaction Control Language)이라고 하며 트랜잭션의 결과를 허용하거나 취소하는 목적으로 사용되는 언어
- 커밋 : 트랜잭션 확정 : 트랜잭션을 메모리에 영구적으로 저장하는 명령어
- 롤백 : 트랜잭션 취소 : 트랜잭션 내역을 저장 무효화 시키는 명령어
- 체크포인트 : 저장 시기 설정 : ROLLBACK 위한 시점을 지정하는 명령어
3. 병행 제어 : 다수 사용자 환경에서 여러 트랜잭션을 수행할 때, 데이터베이스 일관성 유지를 위해 상호작용을 제어하는 기법
- 병행기법 종류 : 로킹, 낙관적 검증, 타임 스탬프 순서, 다중버전 동시성 제어
- 로킹 : 하나의 트랜잭션을 실행하는 동안 특정 데이터 항목에 대해서 다른 트랜잭션이 동시에 접근하지 못하도록 상호배제 기능을 제공하는 기법
- 낙관적 검증 : 트랜잭션이 어떠한 검증도 수행하지 않고 일단 트랜잭션을 수행하고, 트랜잭션 종료시 검증을 수행하여 데이터베이스에 반영하는 기법
4. 회복기법 : 트랜잭션을 수행하는 도중 장애로 인해 손상된 데이터베이스를 손상되기 이전의 정상적인 상태로 복구시키는 작업
- REDO : 데이터베이스가 비정상적으로 종료되었을 때 디스크에 저장된 로그를 분석하여 트랜잭션의 시작과 완료에 대한 기록이 있는 트랜잭션들의 작업을 재작업하는 기법
- UNDO : 데이터베이스가 비성장적으로 종료되었을 때 디스크에 저장된 로그를 분석하여 트랜잭션의 시작은 있지만 완료 기록이 없는 트랜잭션들이 작업한 변경 내용들을 모두 취소하는 기법
DDL : 데이터 정의어는 데이터를 정의하는 언어
- 도메인 : 하나의 속성이 가질 수 있는 원자값들의 집합, 속성의 데이터 타입과 크기, 제약조건 등의 정보
- 스키마 : 데이터베이스의 구조, 제약조건 등의 정보를 담고 있는 기본적인 구조
- 외부 스키마 : 사용자나 개발자의 관점에서 필요로 하는 데이터베이스의 논리적 구조
- 개념 스키마 : 데이터베이스의 전체적인 논리적 구조, 전체적인 뷰를 나타냄
- 내부 스키마 : 물리적 저장 장치의 관점에서 보는 데이터베이스 구조
- 테이블 : 데이터 저장 공간
- 뷰 : 하나 이상의 물리 테이블에서 유도되는 가상의 테이블
- 인덱스 : 검색을 빠르게 하기 위한 데이터 구조
튜플 / 행 : 테이블 내의 행을 의미하며 레코드라고도 함
카디널리티 : 튜플의 개수
애트리뷰트 / 열 : 테이블 내의 열을 의미, 열의 개수를 디그리 라고 함
차수 : 애트리뷰트의 개수
인덱스 : 검색 연산의 최적화를 위해 데이터베이스 내 값에 대한 주소 정보로 구성된 데이터 구조
데이터베이스 파일 구조 : 순차방법, 인덱스 방법, 해싱 방법
DDL : create, alter, drop, truncate
create table 사원 (
사번 varchar(10) primary key,
업무 varchar(20) foreign key references 부서(부서코드),
이름 varchar(10) unique,
생년월일 char(8) not null,
성별 char(1) check (성별 = 'M' or 성별 = 'F')
);
alter table : 테이블을 추가
alter table 사원 add 전화번호 varchar(11) unique;
-> 사원 테이블의 전화번호라는 컬럼에 대해 타입이 varchar(11) 이면서 유니크 제약조건을 걸도록 추가하기
alter table 사원 modify 이름 varchar(30) not null;
alter table 사원 drop column 생년월일;
drop table 사원;
cascade : 참조하는 테이블까지 제거
restrict : 다른 테이블이 삭제할 테이블을 참조중이면 제거하지 않음
truncate table 사원;
-> 사원 테이블 내의 모든 데이터를 삭제
create view 사원뷰 as
select 사번, 이름 from 사원 where 성별 = 'M';
(view 테이블의 select 문에슨 union이나 order by 절을 사용할 수 없다)
drop view 뷰이름;
create index 사번인덱스 on 사원(사번);
-> 사원 테이블의 사번 컬럼에 사번인덱스라는 인덱스 명으로 인덱스를 생성
alter index 사번인덱스 on 사원(사번);
-> 사원 테이블의 사번 컬럼에 대해 사번인덱스라는 인덱스 명으로 수정
drop index 사번인덱스;
-> 사번인덱스라는 인덱스 명으로 가지고 있는 인덱스 삭제
select * from product where price between 5000 and 8000;
-> 5000이상 8000이하
select * from product name like '정보%';
-> 상품 테이블에서 이름이 정보로 시작되는 문자열
select * from product name like '[ABC]%';
-> 첫번째 문자가 A또는 B또는 C인 문자열과 일치하는 문자열 검색
내부조인
select A.책번호, A.책명, B.가격
from 도서 A join 도서가격 B
on A.책번호 = B.책번호;
왼쪽 외부조인
select A.책번호, A.책명, B.가격
from 도서 A left join 도서가격 B
on A.책번호 = B.책번호;
오른쪽 외부조인
select A.책번호, A.책명, B.가격
from 도서 A rigth join 도서가격 B
on A.책번호 = B.책번호;
완전외부조인
select A.책번호, A.책명, B.가격
from 도서 A full join 도서가격 B
on A.책번호 = B.책번호;
교차조인
select A.책번호, A.책명, B.가격
from 도서 A cross join 도서가격 B;
union : 중복행이 제거된 쿼리 결과를 반환
union all : 중복행이 제거되지 않은 쿼리 결과 반환
intersect : 공통적으로 존재하는 결과 - 교집함
minus : 첫번째 쿼리에만 존재하는 차집함
select ename
from emp
where sal <= 2000
union
select ename
from emp
where sal >= 1500;
insert into 학생(학번, 성명, 학년)
values(6633, '홍길동', 5);
update 학생 set 주소 = '인천' where 이름 = '장길산';
delete from 학생 where 이름 = '장길산';
grant update on 학생 to 장길산; 그온투
revoke update on 학생 from 장길산; 리온프
다중행 연산자
in : 리턴되는 값 중에서 조건에 해당하는 값이 있으면 참
any : 서브쿼리에 의해 리턴되는 각각의 값과 조건을 비교하여 하나 이상을 만족하면 참
all : 값을 서브쿼리에 의해 리턴되는 모든 값과 조건 값을 비교하여 모든 값을 만족해야만 참
exists : 하나라도 존재하면 참
집계함수
STDDEV : 복수 행의 해당 컬럼 간의 표준편차
VARIAN : 복수 행의 해당 컬럼 간의 분산을 계산
select dept, job, sum(salary)
from dept_salary
group by rollup(dept, job);
부서명(dept) | 직위(job) | 연봉(salary) |
마케팅부 | 부장 | 4000 |
마케팅부 | 차장 | 2000 |
마케팅부 | 과장 | 1500 |
마케팅부 | 7500 | |
기획부 | 부장 | 3800 |
기획부 | 차장 | 1800 |
기획부 | 5600 | |
13100 |
select dept, job, sum(salary)
from dept_salary
group by cube(dept, job);
부서명 | 직위 | 연봉 |
13100 | ||
부장 | 7800 | |
차장 | 3800 | |
과장 | 1500 | |
마케팅부 | 7500 | |
마케팅부 | 부장 | 4000 |
마케팅부 | 차장 | 2000 |
마케팅부 | 과장 | 1500 |
기획부 | 5600 | |
기획부 | 부장 | 3800 |
기획부 | 차장 | 1800 |
윈도함수
select name,
salary,
rank() over (order by salary desc) A,
dense_rank() over (order by salary desc) B,
row_number() over (order by salary desc) C,
이름 | 연봉 | A | B | C |
장길산 | 3000 | 1 | 1 | 1 |
임꺽정 | 2500 | 2 | 2 | 2 |
홍길동 | 2500 | 2 | 2 | 3 |
김철수 | 2200 | 4 | 3 | 4 |
한유리 | 2000 | 5 | 4 | 5 |
프로시저 : 일련의 쿼리들을 마치 하나의 함수처럼 실행하기 위한 쿼리의 집함
사용자 정의 함수 : 일련의 SQL 처리를 수행하고 수행 결과를 단일 값으로 반환
트리거 : 데이터베이스 시스템에서 삽입, 갱신, 삭제 등의 이벤트가 발생할 때마다 관련 작업이 자동으로 수행되는 절차형 SQL
옵티마이저 : SQL을 가장 빠르고 효율적으로 수행할 최적의 처리경로를 생성해주는 DBMS내부의 핵심엔진