기록하는삶
[데이터베이스/DB] SQL의 정의와 종류, 트랜잭션(transaction)의 정의와 특징 본문
SQL(Structured Query Language)
> 번역하면 구조화된 질의어
> IBM에서 개발한, 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터 관리를 위해 설계된 특수 목적의 언어
> 그 종류로는 데이터 정의어(DDL), 데이터 조작어(DML), 데이터 제어어(DCL) 등이 있다.
SQL 종류
1) 데이터 정의어(DDL _ Data Definition Language)
데이터간의 관계 정의를 위한 언어. 테이블과 같은 데이터 구조 혹은 객체를 생성, 변경, 삭제하는데 사용됨. 즉, 데이터 자체가 아니라, 데이터가 들어있는 구조를 위한 언어.
ex) create, alter, drop, rename 등
사용 예시)
DESC (테이블명) → 테이블의 구조(보유 column, Null 허용 여부, 각 column 데이터타입) 조회
오라클에서 사용되는 주요 데이터 타입은 다음과 같다.
Data Type | 설명 |
VARCHAR2(n) | 가변길이 문자 데이터. 이름(최대 10자) 등에 사용됨 입력을 덜하는 경우, 입력한 만큼만 데이터 공간을 차지 |
CHAR(n) | 고정길이 문자 데이터. 주민번호(13자리 고정) 등에 사용됨 입력을 덜하는 경우에도 배정된만큼 데이터 공간 차지 |
NUMBER(p,s) | 전체 p자리 수를 소수점 이하 s자리까지 포함해 나타냄 |
DATE | 7 Byte (YYYYMMDD) |
CLOB | 단일 바이트 가변 길이 문자데이터 |
BLOB | 가변 길이 이진(binary) 데이터 |
Alter table (테이블명)
Add (컬럼명) (데이터타입);
→ (테이블명) 이라는 테이블을 변경하겠다, (컬럼명) 이라는 컬럼을 (데이터타입)의 타입으로 추가해라
2) 데이터 조작어(DML _ Data Manipulation Language)
데이터베이스 사용자 혹은 응용프로그램의 데이터를 검색, 등록, 삭제, 갱신 등 처리하기 위한 언어. 데이터 자체에 접근하기 위한 언어다.
ex) select, from, where, insert, update, delete 등
사용 예시)
Select *
from (테이블명);
→ (테이블명) 이라는 테이블의 모든 컬럼 정보를 불러와라(조회), 이때 *는 모든 컬럼을 의미
Select (컬럼명1) (별명1), (컬럼명2) (별명2), (컬럼명3) (별명3)
from (테이블명);
→ (테이블명) 이라는 테이블에서 컬럼명1, 컬럼명2, 컬럼명3을 불러오되, 각각의 이름을 별명1, 별명2, 별명3으로 바꾸어 불러와라. 각 별명은 alias로, 컬럼명과 쉼표 없이 이어붙임으로써 부여할 수 있다. (컬럼명 as 별명 으로 표현해도 되나, as가 생략 가능)
Select (컬럼명1)||'와'||''||(컬럼명2)||'를 함께'
from (테이블명)
→ 합성 연산자 '||'를 이용하면 문자와 문자를 이어붙여 불러올 수 있다. 위와 같이 입력하면, 예를 들어 '급여와 연차를 함께'라는 컬럼을 만들어 기존 테이블에서 급여(컬럼1)와 연차(컬럼2)를 불러와 해당 형식으로 보여준다.
3) 데이터 제어어(DCL _ Data Control Language)
데이터에 대한 엑세스를 제어하기 위한 언어. 데이터 보안, 무결성, 병행수행제어 등에 사용됨.
ex) grant, revoke, commit, rollback
commit과 rollback 명령어를 이해하기 위해 트랜잭션의 의미를 이해해야 한다.
트랙잭션(transaction)
> 하나의 작업을 수행하기 위한 한 개 이상의 데이터베이스 조작의 집합으로, 분리될 수 없는 논리적 작업단위이다. 위의 예를 바탕으로 생각해본다면, 특정 테이블에 컬럼을 추가하고 데이터를 입력하고 싶다면(작업), 테이블에 컬럼을 생성한 뒤 데이터를 입력하는 것까지가 하나의 작업 단위인 트랜잭션이 될 것이다(생성 + 입력). 일상의 예로 더 쉽게 생각하면, 한글 파일 하나를 열어 저장하기 전까지 내용을 입력, 수정하는 모든 행위가 하나의 트랜잭션이고, 이 트랜잭션을 단위로 저장을 눌러 영구히 보관하거나(commit), 혹은 저장을 하지 않고 종료해 이전에 저장된 데이터만을 보존하는(rollback) 선택이 가능한 것과 유사하다고 볼 수 있다. 물론 트랜잭션 중간단계의 과정을 임시로 보관해주기도 한다(저장되지 않고 종료된 파일이 있습니다, 이어서 작업하시겠습니까? 처럼). 다만 이는 데이터베이스에 영구히 저장된 것이 아니다.
> commit 연산
트랙잭션에서 수행한 모든 결과(생성, 수정, 추가, 삭제 등)를 데이터베이스에 영구적으로 반영, 트랜잭션을 종료하는 연산. 이전 데이터는 (백업을 제외하고) 사라진다. 모든 사용자가 변경 사항을 볼 수 있다.
> rollback 연산
트랜잭션에서 수행중이던 모든 과정(생성, 수정, 추가, 삭제 등)을 모두 철회하고 트랜잭션이 시작되기 이전에 영구히 저장되었던 형태로 되돌리는 연산. 즉 마지막 commit 직후의 상태로 돌아감.
> 트랜잭션의 ACID
① 원자성(Atomicity): All or nothing. 트랜잭션 단위의 연산 전체가 성공하거나, 하나라도 실패시 전체가 취소되어 데이터의 무결성을 보장.
② 일관성(Consistency): 트랜잭션이 성공적으로 완료시, 일관된 데이터베이스 상태가 보존됨. 일관성에 문제가 생기는 입력이 들어오면 commit이 되지 않음.
③ 고립성(isolation): 트랙잭션이 실행 중에 만들어지는 중간 결과를 다른 트랜잭션이 접근하지 못함. 수정중인 데이터 참조 시 이전 commit을 기준으로 저장된 데이터가 참조되고, 동시에 하나의 데이터를 변경, 삭제하려 하는 경우 시스템에서 lock을 걸어 막는다.
④ 영속성(Durability): 성공이 완료된 트랜잭션의 결과는 영구적으로 데이터베이스에 저장됨.
'AI > 데이터베이스(DB)' 카테고리의 다른 글
[몽고DB/Mongoose] 설치, DB서버 열기, 간단한 DB 활용 (0) | 2021.10.06 |
---|---|
[데이터베이스/DB] 데이터, 데이터베이스(DB), 데이터베이스시스템(DBS) (0) | 2021.09.22 |
[데이터베이스/DB] 엔티티(Entity)와 어커런스(Occurrence) (0) | 2021.09.22 |
[데이터베이스/DB] 데이터베이스 정규화(DB Nomalization), 이상현상(Anomaly), 1차/2차/3차 및 보이스코드 정규화의 쉬운 설명 (0) | 2021.09.22 |