backend
  • README
  • DOCS
    • Java Docs
    • Servlet Docs
    • JSP Docs
    • DB & SQL Docs
    • Spring Boot Docs
    • Spring Security Docs
    • AWS Docs
  • 설치하기
    • Intellij 설정
  • 자바
    • 01 Java란?
    • 02 자바 시작하기
    • 03 자료형과 연산자
    • 04 제어문
    • 05 메소드
    • 06 클래스 기초
      • Static 보충자료
      • 패키지 보충자료
    • 07 객체지향 프로그래밍
    • 08 클래스 더 알아보기
      • 열거형 ENUM 보충자료
    • 09 클래스와 자료형
      • 다형성 보충자료
      • 제네릭 보충자료
    • 10 컬렉션 프레임워크
      • 컬렉션 프레임워크 보충자료
    • 11 람다식과 함수형 프로그래밍
      • 람다식 보충자료
    • 12 오류 대비하기
      • 오류 보충자료
    • 13 멀티태스킹
      • 멀티태스킹 보충자료
    • 교재보충
      • java.lang
  • 스프링
    • 서블릿, JSP
      • 05 Servlet(서블릿)
        • 서블릿 보충자료
        • 서블릿 추가코드
        • XML, YAML, JSON
      • 06 JSP(자바 서버 페이지)
        • JSP 보충자료
      • 07 JSTL(JSP 스탠다드 태그 라이브러리)
        • JSTL 보충자료
      • 08 Cookie(쿠키), Session(세션)
      • 09 서블릿,필터,리스너
        • 서블릿,필터,리스너 보충자료
      • 11 도서관리 프로젝트 실습
    • Spring Boot
      • 01 스프링 등장 배경, 객체지향
        • 스프링 등장 배경, 객체지향 보충자료
      • 02 IOC(제어의 역전), DI(의존성 주입)
        • IOC 보충자료
        • DI 보충자료
      • 03 스프링 구조
        • 스프링 구조 보충설명
      • 04 테스트코드 실습
      • 05 스프링 빈 설정
        • 스프링 빈 설정 보충자료
      • 06 싱글톤
        • 싱글톤 보충 자료
      • 07 스프링 빈 자동설정
        • 스프링 빈 자동설정 보충자료
      • 08 빈 생명주기
        • 빈 생명주기 보충자료
      • 09 빈 스코프
        • 빈 스코프 보충자료
      • 10 스프링 MVC
        • 스프링 MVC 보충자료
        • 데이터베이스 연동에 필요한 부분
      • 11 Validation(검증)
        • Validation(검증) 보충자료
      • 12 Bean Validation(빈검증)
        • Bean Validation(빈검증) 보충자료
      • 13 예외처리
        • 예외처리 보충자료
      • 14 타입변환
      • 15 JDBC(Java Database Connectivity)
      • 16 커넥션풀
      • 17 트랜잭션
        • 트랜잭션 보충자료
      • 18 JDBC 템플릿 활용
      • 19 MyBatis
      • 20 JPA(Java Persistence API)
      • 22 게시판 프로젝트 실습
    • Spring Security
      • 보안(Security)
      • Spring Security
      • 2. Spring Security 알아보기
        • 보안 위협 실제 사례와 방어 전략
      • 3. Spring Security 기본 동작 흐름
      • 4. Spring Security로 인증 권한 추가하기
        • Spring Security의 인증 및 인가
      • 5. Spring Security에서 세션 관리하기
        • 세션(Session)과 쿠키(Cookie) 비교, 토큰(Token)과의 관계
        • 해싱 및 해싱알고리즘
        • base64
      • 6. Spring Security 악용 보호
        • SameSite
      • 7. Spring Security로 인가 권한 추가하기
      • 8. Bcrypt(비크립트) 암호화
      • OAuth2 적용하기
  • 네트워크
    • HTTP
    • OSI 7계층
  • DB&SQL
    • 01 Database(데이터베이스)와 SQL 개요
    • 02 관계형 모델
    • 03 집합
    • 04 JOIN 연산
    • 05 MySQL
      • 세이브포인트
      • DBeaver, Mysql 오토커밋 설정 관련
    • 06 SQL 기초
      • 예시데이터 쿼리문
    • 07 SQL 실습
      • 실습 스키마
    • 08 Join 활용
      • 실습스키마
    • 09 SQL 활용
      • 실습스키마
    • 10 정규화
      • 실습 스키마
    • 데이터타입
    • 예시 프로젝트 스키마 구성
  • AWS
    • SSL 연결하기
    • 보충설명
Powered by GitBook
On this page
  1. DB&SQL
  2. 05 MySQL

세이브포인트

**Savepoint(세이브포인트)**란 무엇인가?

Savepoint는 데이터베이스 트랜잭션 중에 특정 시점으로 **롤백(ROLLBACK)**할 수 있도록 저장하는 중간 저장 지점입니다. 트랜잭션 내에서 여러 변경 작업이 수행되는 도중 일부 작업만 취소하고 싶을 때 유용합니다.


특징

  1. 트랜잭션 내부에서 사용됨:

    • Savepoint는 반드시 활성화된 트랜잭션(BEGIN 혹은 START TRANSACTION) 안에서 사용해야 합니다.

  2. 부분 롤백 가능:

    • 전체 트랜잭션을 롤백하지 않고, 지정한 Savepoint 이후의 작업만 취소할 수 있습니다.

  3. 성능 개선:

    • 트랜잭션 중간에 상태를 저장하여 필요 시 특정 지점으로 복구할 수 있어 데이터 처리의 안정성과 효율성을 높입니다.

  4. Savepoint는 이름을 가짐:

    • 각 Savepoint는 고유한 이름을 가져야 하며, 이 이름을 사용해 해당 지점으로 롤백할 수 있습니다.


Savepoint의 주요 SQL 문법

1. Savepoint 생성

Savepoint를 생성하려면 SAVEPOINT 키워드를 사용합니다.

SAVEPOINT savepoint_name;

2. Savepoint로 롤백

특정 Savepoint까지 롤백하려면 다음을 사용합니다:

ROLLBACK TO SAVEPOINT savepoint_name;
  • 이 명령은 지정된 Savepoint 이후에 수행된 작업을 취소합니다.

  • Savepoint 이전의 작업은 유지됩니다.

3. Savepoint 제거

더 이상 필요하지 않은 Savepoint를 제거하려면 다음을 사용합니다:

RELEASE SAVEPOINT savepoint_name;
  • Savepoint를 해제하면 해당 지점으로 더 이상 롤백할 수 없습니다.

4. 트랜잭션 종료

트랜잭션을 전체적으로 커밋하거나 롤백하면 Savepoint도 자동으로 제거됩니다:

  • COMMIT → 모든 Savepoint가 제거됨.

  • ROLLBACK → 트랜잭션 전체가 취소되며 Savepoint도 제거됨.


Savepoint 사용 예시

트랜잭션과 Savepoint

CREATE TABLE accounts (
    id INT AUTO_INCREMENT PRIMARY KEY, -- 고유 ID
    name VARCHAR(50) NOT NULL,         -- 계좌 이름
    balance DECIMAL(10, 2) NOT NULL    -- 잔액 (소수점 2자리까지)
);
-- 트랜잭션 시작
START TRANSACTION;

-- 첫 번째 작업
INSERT INTO accounts (name, balance) VALUES ('Alice', 1000);

-- Savepoint 생성
SAVEPOINT sp1;

-- 두 번째 작업
UPDATE accounts SET balance = balance - 200 WHERE name = 'Alice';

-- Savepoint 생성
SAVEPOINT sp2;

-- 세 번째 작업 (의도적으로 오류 발생 가능)
INSERT INTO accounts (name, balance) VALUES ('Bob', -500); -- 오류 발생

-- 오류 발생 후 특정 지점으로 롤백
ROLLBACK TO SAVEPOINT sp2;

-- 남은 작업 완료
UPDATE accounts SET balance = balance + 100 WHERE name = 'Alice';

-- 트랜잭션 커밋
COMMIT;

Savepoint의 장점

  1. 부분적인 오류 처리:

    • 트랜잭션 중 일부 작업에서 오류가 발생하더라도, 전체 트랜잭션을 롤백하지 않고 원하는 Savepoint까지 롤백할 수 있습니다.

  2. 복잡한 트랜잭션 처리:

    • 여러 단계로 구성된 작업에서 단계별 상태를 저장하여 데이터 무결성을 보장합니다.

  3. 유연성 제공:

    • 필요에 따라 특정 지점까지 작업을 되돌리거나 전체 트랜잭션을 유지할 수 있는 유연성을 제공합니다.


Savepoint의 주의사항

  1. Savepoint는 트랜잭션 내부에서만 유효:

    • 트랜잭션이 종료되면 Savepoint는 자동으로 제거됩니다.

  2. 오버헤드:

    • Savepoint를 과도하게 생성하면 데이터베이스 리소스에 부하가 생길 수 있으므로 적절히 사용해야 합니다.

  3. 지원 여부:

    • 일부 데이터베이스 시스템(MySQL, PostgreSQL, Oracle 등)은 Savepoint를 지원하지만, 일부는 제한적일 수 있습니다.


데이터베이스별 Savepoint 지원

DBMS

지원 여부

주요 제한 사항

MySQL

지원

RELEASE SAVEPOINT 명령은 불완전하게 지원됨.

PostgreSQL

지원

완벽하게 지원.

Oracle

지원

표준 SQL과 호환.

SQL Server

지원

Savepoint는 지원하지만 일부 트랜잭션 격리 수준에서 제한.

Previous05 MySQLNextDBeaver, Mysql 오토커밋 설정 관련

Last updated 5 months ago