`ROLLBACK TO SAVEPOINT`는 SQL에서 트랜잭션의 특정 저장점(SAVEPOINT)으로 되돌아가는 명령어입니다. 이 명령어를 사용하면 지정한 저장점 이후에 수행된 모든 작업이 취소됩니다. 그러나 저장점 이전에 수행된 작업은 유지됩니다.
### 주요 사용 사례
- **부분적인 오류 처리**: 트랜잭션을 수행하는 도중에 예상치 못한 오류가 발생했을 때, 전체 트랜잭션을 취소하지 않고 특정 저장점 이후의 작업만 되돌리고 싶을 때 사용합니다.
- **조건부 작업 취소**: 트랜잭션 내에서 특정 조건이 만족되지 않으면 일부 작업만 취소하고, 나머지 작업은 유지하고자 할 때 유용합니다.
### 구문
```sql
ROLLBACK TO SAVEPOINT savepoint_name;
```
- `savepoint_name`: 이전에 정의한 `SAVEPOINT`의 이름입니다. 이 지점으로 트랜잭션이 되돌아갑니다.
### 예제
1. **트랜잭션 시작**:
```sql
BEGIN TRANSACTION;
```
2. **첫 번째 작업 수행**:
```sql
INSERT INTO accounts (account_id, balance) VALUES (1, 1000);
```
3. **저장점 설정**:
```sql
SAVEPOINT sp1;
```
4. **두 번째 작업 수행**:
```sql
INSERT INTO accounts (account_id, balance) VALUES (2, 2000);
```
5. **오류 발생 또는 조건 불만족**:
- 이 시점에서 문제가 발생했다고 가정합니다.
6. **저장점으로 롤백**:
```sql
ROLLBACK TO SAVEPOINT sp1;
```
- 이 명령어를 실행하면 `sp1` 저장점 이후의 작업(즉, `account_id`가 `2`인 행의 삽입)이 취소됩니다. `account_id`가 `1`인 행의 삽입은 그대로 유지됩니다.
7. **나머지 작업 수행**:
```sql
INSERT INTO accounts (account_id, balance) VALUES (3, 3000);
```
8. **트랜잭션 커밋 (확정)**:
```sql
COMMIT;
```
### 주요 특징
- **저장점 이후의 작업만 취소**: `ROLLBACK TO SAVEPOINT`는 저장점 이후의 작업만 취소합니다. 전체 트랜잭션을 롤백하지 않습니다.
- **저장점 이전의 작업은 유지**: 저장점 이전의 작업은 그대로 유지되며, 트랜잭션 내에서 계속 이어질 수 있습니다.
### 결론
`ROLLBACK TO SAVEPOINT`는 트랜잭션 중 발생할 수 있는 오류를 세밀하게 처리하고, 필요한 경우 일부 작업만 되돌리는 데 매우 유용한 도구입니다. 이를 통해 데이터베이스의 무결성을 유지하면서 복잡한 트랜잭션을 관리할 수 있습니다.
'Data Analysis 데이터 분석 > SQL 통한 Database 관리' 카테고리의 다른 글
values () (0) | 2024.08.29 |
---|---|
savepoint ? (0) | 2024.08.29 |
update set (0) | 2024.08.29 |
GROUP BY 예시 (0) | 2024.08.29 |
groupby 가 어떻게 실행되는지 예시로 알려줘 (0) | 2024.08.29 |