트랜잭션
- 트랜잭션 : 통상적으로 정보의 교환이나 데이터베이스 갱신 등 일련의 작업들에 대해 연속처리단위를 의미
- DB의 무결성이 보장되는 상태에서 요청된 작업을 완수하기 위한 작업의 기본 단위로 간주
- 간단히 DB의 상태를 변화시키는 작업의 모음
- 주로 DB의 상태를 변화시키는 INSERT, DELETE, UPDATE 중 한개 이상의 DML(Data Manipulation Language)과 같이 사용
- 생활 속 예시
- 위 작업 중 어느 하나가 실패로 실행된다면 위의 전제는 실행되어선 안된다.
COMMIT과 Rollback
1 |
|
- 트랜잭션 : 여러 개의 작업을 하나의 실행 유닛으로 묶어즌 것
- 각 트랜잭션은 하나의 특정 작업으로 시작해 묶여 있는 모든 작업을 다 완료해야 끝나게 되어있다.
- 만약 한 개의 작업이라도 실패하게 된다면 전부 실패한다.
- 작업이 하나라도 실패하면 트랜잭션도 실패이고 모든 작업이 성공적이면 트랜잭션 또한 성공적이게 된다.
- 트랜잭션은 미완료된 단계없이 전부를 성공해야 한다.
- 데이터베이스 트랜잭션의 정의는 ACID 특성을 가지고 있다.
ACID
Atomicity(원자성)
- 하나의 트랜잭션을 구성하는 작업은 전부 성공하거나 전부 실패해야 된다.
- 부분적으로 실행되면 안된다.
- SQL에서 특정 쿼리를 실행했는데 부분적으로 실패하는 부분이 있다면 전부 실패하게 되어있다(충돌 요인에 대해 선택지를 제공한다).
Consistency(일관성)
- 하나의 트랜잭션 이전과 이후 데이터베이스 상태는 이전과 같이 유효해야 한다.
- 데이터베이스의 제약이나 규칙에 의거한 데이터베이스여야 한다.
- cf. user 테이블에 id와 name이 있어야 한다면, 둘 중 하나가 없다면 진행되지 않는다.
Isolation(고립성)
- 하나의 트랜잭션이 다른 트랜잭션과 독립되어야 한다.
- 실제로 동시에 여러 개의 트랜잭션이 수행될 때 각 트랜잭션은 고립되어 있어 연속으로 실행된 것과 동일한 결과를 나타내야 한다.
- 각 트랜잭션은 다른 트랜잭션의 연산 내용을 알 수 없다.
- 동시에 실행될 때와 연속으로 실행될 때의 데이터 베이스 상태가 동일해야 한다.
Durability(지속성)
- 하나의 트랜잭션이 성공적으로 수행되었다면 해당 트랜잭션에 대한 로그가 남고 런타임 오류나 시스템 오류가 발생해도 해당 기록은 영구적이어야 한다.
SQL More
내장함수
GROUP BY
- 데이터를 조회할 때 분류하여 묶어서 조회하는 기능
1 |
|
- 각 주 기반 그룹화
1 |
|
HAVING
- GROUP BY로 조회된 결과에 대한 필터
1 |
|
- coustomers의 수가 3을 넘는 결과만 조회
- WHERE는 그룹화하기 전에 조회되는 레코드를 필터
GROUP BY 후
COUNT()
: 몇 개인지 값을 리턴SUM()
: 합AVG()
: 평균MAX()
,MIN()
: 최대, 최소값
1 |
|
SELECT 실행 순서
- FROM
- WHERE
- GROUP BY
- HAVING
- SELECT
- ORDER BY
1 |
|
etc
- CASE : SQL에서의 if문
- SUBQUERY : 쿼리문을 작성할 때 다른 쿼리문을 포함하는 것(JOIN과 유사)
1 |
|