1. 트랜잭션
- 개념: DB 시스템에서 하나의 논리적 기능을 정상적으로 수행하기 위한 작업의 기본 단위
- 특성 (ACID)
1) 원자성 (Atomicity): 분해가 불가능한 작업의 최소 단위. 하나라도 실패하면 전체가 취소
2) 일관성 (Consistency): 트랜잭션 실행 성공 후 항상 일관된 DB 상태를 보존해야 함
3) 격리성 (Isolation): 트랜잭션 실행 중 다른 트랜잭션이 접근 불가
4) 영속성 (Durability): 트랜잭션 결과는 DB에 영속적으로 저장
- TCL 명령어 (트랜잭션 제어 언어)
1) 커밋 (COMMIT): 트랜잭션 확정. 메모리에 영구 저장
2) 롤백 (ROLLBACK): 트랜잭션 취소. 저장 무효화
3) 체크포인트 (CHECKPOINT): 롤백을 위한 시점 지정
- 병행 제어
: 여러 트랜잭션을 수행할 때, DB 일관성 유지를 위해 상호작용을 제어
- 종류: 로킹, 낙관적 검증, 타임 스탬프 순서, 다중버전 동시성 제어
- 회복 기법
: 트랜잭션 수행 도중 손상된 DB를 정상적인 상태로 복구시키는 작업
- 종류
1) 로그 기반 회복 기법: 지연 갱신 회복 기법 / 즉각 갱신 회복 기법
2) 체크 포인트 회복 기법
3) 그림자 페이징 기법: 복제본 이용
2. DDL (데이터 정의어)
- 개념: 데이터를 정의하는 언어. 특정 구조를 생성, 변경, 삭제, 이름을 바꾸는 명령어들
- DDL의 대상
1) 도메인: 한 속성이 가질 수 있는 원자값들의 집합
2) 스키마: 구조, 제약조건 등 정보를 담는 기본적인 구조
(1) 외부 스키마: 사용자 뷰. 서브 스키마
(2) 개념 스키마: 전체적인 뷰. DB의 전체적인 논리 구조
(3) 내부 스키마: 물리적 저장장치 관점.
3) 테이블: 데이터 저장 공간
4) 뷰: 물리 테이블에서 유도되는 가상 테이블. 논리적 데이터 독립성 & 보안. 자체 인덱스와 정의 변경 불가
5) 인덱스
- 명령어
: CREATE, ALTER, DROP(오브젝트 삭제), TRUNCATE(오브젝트 내용 삭제)
1) TABLE
(1) 테이블 생성
- CREATE TABLE 사원 (
사번 VARCHAR(10) PRIMARY KEY,
업무 VARCHAR(20) FOREIGN KEY REFERENCES 부서(부서코드),
이름 VARCHAR(10) UNIQUE,
생년월일 CHAR(8) NOT NULL,
성별 CHAR(1) CHECK(성별 = ‘F’ OR 성별 = ‘M’), // 참이어야 하는 조건을 지정
입사일 DATE DEFAULT SYSDATE // insert할 때 값을 넣지 않는 경우 기본값
);
(2) 테이블 수정
- ALTER TABLE 사원 ADD 전화번호 VARCHAR(11) UNIQUE; // 컬럼 추가
- ALTER TABLE 사원 MODIFY 이름 VARCHAR(30) NOT NULL; // 컬럼 수정
- ALTER TABLE 사원 DROP 생년월일; // 컬럼 삭제
(3) 테이블 삭제
- DROP TABLE 테이블명 [CASCADE | RESTRICT]; // CASCADE: 연쇄 제거, RESTRICT: 참조 중이면 제거X
(4) 테이블 내 데이터 삭제
- TRUNCATE TABLE 테이블명;
2) VIEW
- CREATE VIEW 사원뷰 AS SELECT 사번, 이름 FROM 사원 WHERE 성별 = ‘F’;
* VIEW 테이블 내 SELECT 문에서는 UNION과 ORDER BY 절을 사용할 수 없음
- CREATE OR REPLACE VIEW 뷰이름 AS 조회쿼리; // 뷰를 교체
- DROP VIEW 뷰이름;
3) INDEX
- CREATE [UNIQUE] INDEX 인덱스명 ON 테이블명(컬럼명1, 컬럼명2, ...);
- ALTER [UNIQUE] INDEX 인덱스명 ON 테이블명(컬럼명1, 컬럼명2, ...);
- DROP INDEX 인덱스명;
3. DML (데이터 조작어)
: DB의 자료들을 입력, 수정, 삭제, 조회하는 언어
- 명령어: SELECT, INSERT, UPDATE, DELETE
1) SELECT
SELECT [ALL | DISTINCT] 속성명1, 속성명2, ... FROM 테이블명1, ...
[WHERE 조건]
[GROUP BY 속성명1, ...]
[HAVING 그룹조건]
[ORDER BY 속성 [ASC | DESC]];
(1) WHERE 절
- 비교: =, <>, !=, <, <=, >, >=
- 범위: 컬럼 BETWEEN 값1 AND 값2
- 집합: 컬럼 IN (값1, 값2, ...) / 컬럼 NOT IN (값1, 값2, ...)
- 패턴: 컬럼 LIKE 패턴 (%: 0개이상 일치, []: 1개 일치, [^]: 1개 불일치, _: 특정위치 1개 일치
- NULL: 컬럼 IS NULL, IS NOT NULL
- 복합조건: AND, OR, NOT
(2) GROUP BY 절
SELECT 부서, SUM(급여) AS 급여합계
FROM 급여
GROUP BY 부서;
(3) HAVING 절 // GROUP BY에 의해 분류한 후 그룹에 대한 조건 지정
SELECT 직책, SUM(급여) AS 급여합계
FROM 급여
GROUP BY 직책, 부서
HAVING 급여합계 >= 5000;
(4) ORDER BY 절
- ASC, DESC 명시되지 않은 경우 ASC가 기본값(오름차순)
(5) JOIN
(1) 내부 조인: 공통 존재 컬럼의 값이 같은 경우를 추출
SELECT A.컬럼1, A.컬럼2, ..., B.컬럼1, ...
FROM 테이블1 A [INNER] JOIN 테이블2 B ON 조인조건 [WHERE 검색조건];
(2) 외부 조인: 왼쪽 외부 조인(왼쪽 테이블의 모든 데이터와 오른쪽 테이블의 동일 데이터를 추출),
오른쪽 외부 조인, 완전 외부 조인(FULL. 양쪽의 모든 데이터)
SELECT A.컬럼1, A.컬럼2, ..., B.컬럼1, ...
FROM 테이블1 A LEFT [OUTER] JOIN 테이블2 B ON 조인조건 [WHERE 검색조건];
(3) 교차 조인: 조인 조건이 없는 모든 데이터 조합을 추출
SELECT 컬럼1, 컬럼2, ... FROM 테이블1 CROSS JOIN 테이블2
(4) 셀프 조인: 자기 자신에게 별칭을 지정한 후 다시 조인
SELECT A.컬럼1, A.컬럼2, ..., B.컬럼1, ...
FROM 테이블1 A [INNER] JOIN 테이블1 B ON 조인조건 [WHERE 검색조건];
(6) 서브쿼리
: SQL문 안에 포함된 또다른 SQL문
SELECT MAX(가격) FROM 도서가격 A, (SELECT 책번호 FROM 도서 WHERE 책명=’자료구조’) B
WHERE A.책번호 = B.책번호
(7) 집합 연산자
- UNION, UNION ALL(중복 허용), INTERSECT, MINUS
SELECT ENAME FROM EMP WHERE SAL <= 2000 INTERSECT SELECT ENAME FROM EMP WHERE SAL >= 1500;
2) INSERT
INSERT INTO 테이블명(속성명1, ...) VALUES (데이터1, ...) // 속성명은 생략 가능. 개수, 타입 일치해야 함
3) UPDATE
UPDATE 학생 SET 주소 = ‘인천’ WHERE 이름 = ‘장길산’;
4) DELETE
DELETE FROM 테이블명 WHERE 조건;
4. DCL (데이터 제어어)
- 보안, 무결성, 병행제어, 회복을 위해 관리자가 사용하는 언어
- 유형: GRANT, REVOKE
- GRANT 권한 ON 테이블 TO 사용자;
- REVOKE 권한 ON 테이블 FROM 사용자;
댓글