728x90
SQL 이란 ?
관계형 데이터베이스 관리 시스템(RDBMS) 의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다.
관계형 데이터베이스 관리 시스템에서 자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터베이스 객체 접근 조정 관리르 위해 고안되었다.
SQL문 실행 순서
FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY
구조
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
SQL 문법 종류
DML(Data Manipulation Language) : 데이터 조작 언어
DDL(Data Definition Language) : 데이터 정의 언어
DCL(Data Control Language) : 데이터 제어 언어
TCL(Transaction Control Language) : 트랜잭션 제어 언어
1. DDL이란 ?
테이블과 컬럼을 정의하는 명령어로 생성, 수정, 삭제 등의 데이터 전체 골격을 결정하는 역할을 담당함.
또한, DDL은 명령어를 입력하는 순간 작업이 즉시 반영(Auto Commit) 되기 때문에 사용할 때 주의해야 한다.
명령어 | 역할 |
CREATE | 테이블을 생성하는 역할 |
ALTER | 테이블의 구조를 수정하는 역할 |
DROP | 테이블을 삭제하는 역할 |
RENAME | 테이블의 이름을 변경하는 역할 |
TRUNCATE | 테이블을 초기화하는 역할 |
2. DML이란 ?
데이터베이스의 내부 데이터를 관리하기 위한 언어이다. 데이터를 조회, 추가, 변경, 삭제 등의 작업을 수행하기 위해 사용됨.
DDL와 달리 즉시 반영(Auto Commit)되지 않으며, DML에 의한 데이터 변동은 영구적인 변경이 아니기 때문에 ROLLBACK이 가능함.
DML은 테이블을 메모리 버퍼에 올려두고 변경을 수행하므로, 실시간 테이블에 반영되지 않는다. Commit 명령어를 통해 Transaction을 종료해야 해당 변경 사항이 테이블에 반영된다.
명령어 | 역할 |
SELECT | 데이터베이스에서 데이터를 검색하는 역할 |
INSERT | 테이블에 데이터를 추가하는 역할 |
UPDATE | 테이블 내에 존재하는 데이터를 수정하는 역할 |
DELETE | 테이블에서 데이터를 삭제하는 역할 |
3. DCL이란 ?
데이터를 관리 목적으로 보안, 무결성, 회복, 병행 제어 등을 정의하는데 사용함.
데이터베이스에 접근하여 읽거나 쓰는 것을 제한할 수 있는 권한을 부여하거나 박탈할 수 있고 트랜잭션을 명시하거나 조작할 수 있음.
사용자로부터 데이터를 보호하기 위한 데이터 보안의 역할을 수행하며, 데이터의 정확성을 위한 무결성을 유지함.
시스템 장애에 대비한 회복과 병행수행을 제어한다.
명령어 | 역할 |
GRANT | 권한을 정의할 때 사용하는 명령어 |
REVOKE | 권한을 삭제할 때 사용하는 명령어 |
4. TCL 이란 ?
DCL과 비슷하지만 데이터를 제어하는 언어가 아닌 트랜잭션을 제어할 때 사용함.
논리적인 작업 단위를 묶어 DML에 의해 조작된 결과를 트랜잭션 별로 제어함.
트랜잭션이란 ?
데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위를 말한다. 보통 DBMS 성능을 초당 트랜잭션이 몇개가 실행되었는지로 측정함.
MySQL에 입력하는 모든 명령어들은 각각 하나의 트랜잭션이라고 할 수 있다.
예시
- 게시판에 사용자가 글을 작성하고, 작성 완료 버튼(INSERT)을 누르면 --> 글 작성 처리가 되고 자동으로 다시 게시판 목록으로 돌아오게 됨 --> 그럼 사용자 본인이 작성한 글과 기존에 있던 글(SELECT)들이 같이 보이게 된다.
따라서, 여기서 작업의 단위는 INSERT, SELECT 둘다 합친 것을 의미한다. 이러한 작업단위를 하나의 트랜잭션이라고 한다.
트랜잭션의 특징
Atomicity (원자성)
트랜잭션이 데이터베이스에 모두 반영되거나, 아니면 전혀 반영되지 않아야 한다.
Consistency (일관성)
테이터 타입이 반환 후와 전이 항상 동일하여야 한다.
Isolation (독립성)
하나의 트랜잭션은 다른 트랜잭션에 끼어들 수 없고 마찬가지로 독립적임을 의미한다.
Dutability (지속성)
트랜잭션이 성공적으로 완료 되었을 경우, 결과는 영구적으로 반영되아야 한다. [ Commit이 완료되면 지속성은 자연스럽게 충족됨 ]
트랜잭션의 상태
Active: 트랜잭션이 현재 실행 중인 상태
Failed: 트랜잭션이 실행되다 오류가 발생해서 중단된 상태
Aborted: 트랜잭션이 비정상 종료되어 Rollback이 수행된 상태
Partially Committed: 트랜잭션의 연산이 마지막까지 실행되고 Commit 이 되기 직전 상태
Commited: 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태
Commit
모든 작업들을 정상 처리하겠다고 확정하는 명령어
해당 처리 과정을 DB에 영구 저장하겠다는 의미로 Commit을 수행하면 하나의 트랜잭션 과정이 종료됨
Commit을 하기 전에는 다른 사용자가 트랜잭션 내용을 확인할 수 없음
또한, 변경된 행은 잠금이 설정되어 있어 다른 사용자가 변경할 수 없음
Rollback
작업 중 문제가 발생되어 트랜잭션의 처리 과정에서 발생한 변경사항을 취소하는 명령어
해당 명령을 트랜잭션에게 하달하면 트랜잭션은 Commit 되기 이전의 데이터로 돌아가 변경을 취소함
관련된 행에 대한 잠금이 풀리고 데이터 변경 사항이 복구되는 것
명령어 | 역할 |
COMMIT | 모든 작업을 정상적으로 처리하겠다는 명령어 |
ROLLBACK | 모든 작업을 다시 돌려 놓겠다는 명령어 |
SAVEPOINT | Commit 전에 특정 시점까지만 반영하거나 Rollback 하겠다는 명령어 |
728x90
'DBMS > SQL Study' 카테고리의 다른 글
[SQL] BETWEEN .. AND .. | IN (0) | 2023.08.29 |
---|---|
[SQL] 논리 연산자 (0) | 2023.08.29 |
[SQL] CONCAT() 함수 (0) | 2023.08.29 |
[SQL] AS (Alias) 키워드 (0) | 2023.08.28 |
[SQL] TRUNCATE와 DELETE | DISTINCT와 GROUP BY 의 차이점 (0) | 2023.08.28 |