SQL 명령어 및 Lock 개념 요약
1. TRUNCATE
- 용도: 테이블의 모든 데이터를 삭제.
- 특징:
- 모든 행을 일괄 삭제, WHERE 절 사용 불가.
- 속도가 빠름, 데이터 페이지 자체를 제거.
- 자동으로 커밋되며 ROLLBACK 불가.
- 테이블 구조와 인덱스는 유지됨.
2. DELETE
- 용도: 특정 조건에 맞는 데이터를 삭제.
- 특징:
- WHERE 절을 사용하여 원하는 행을 선택 가능.
- 로그 기록으로 인해 상대적으로 느림.
- 커밋 전까지 ROLLBACK 가능.
- 테이블 구조와 인덱스는 유지됨.
3. ALTER
- 용도: 테이블, 뷰, 인덱스 등의 구조를 변경.
- 특징:
- 스키마 변경을 수행 (열 추가, 수정, 삭제).
- 자동 커밋되어 ROLLBACK 불가.
- 기준점 역할을 할 수 없음.
4. INSERT INTO ... SELECT
- 용도: 한 테이블에서 다른 테이블로 데이터 삽입.
- 특징:
- 두 번째 문장에서 오류 발생 시 전체 트랜잭션이 롤백됨.
- 특정 원인으로 인해 삽입이 실패하면, 이전에 삽입된 데이터도 함께 취소됨.
5. ROLLBACK
- 용도: 트랜잭션 내에서 이전 상태로 되돌리기.
- 기준점:
BEGIN TRANSACTION: 트랜잭션 시작.
SAVEPOINT: 특정 상태 저장.
COMMIT: 변경 사항 영구 반영, 이후 ROLLBACK 불가.
6. Lock 개념
6.1 선행 Lock (Pre-emptive Lock)
- 정의: 트랜잭션이 데이터에 대한 잠금을 요청할 때, 다른 트랜잭션이 그 데이터에 접근하지 못하도록 미리 잠금 설정.
- 목적: 데이터의 무결성을 유지하고 동시성 문제를 방지.
- 사용 예:
- 트랜잭션 시작 시, 필요한 자원에 대해 잠금을 미리 설정.
- 예를 들어, A 트랜잭션이 특정 레코드에 대해 선행 Lock을 설정하면, B 트랜잭션은 해당 레코드에 접근할 수 없음.
6.2 후행 Lock (Deferred Lock)
- 정의: 트랜잭션이 데이터에 대한 잠금을 요청하지만, 해당 데이터에 대한 작업이 필요할 때까지 잠금 설정을 연기.
- 목적: 필요할 때만 잠금을 설정하여 시스템의 유연성을 높이고 성능을 개선.
- 사용 예:
- A 트랜잭션이 특정 레코드에 대한 작업을 실행하기 전, 잠금 요청을 연기하여 다른 트랜잭션의 접근을 허용.
- 레코드를 실제로 수정하기 직전에 잠금을 설정.