728x90
TCL명령어 : 트랜잭션이란?
트랜잭션(Transaction)
하나의 작업으로 처리되는 논리적 작업 단위로,
데이터베이스의 데이터 일관성을 유지하고 데이터 손실을 방지하기 위해 사용된다.
데이터베이스의 데이터 일관성을 유지하고 데이터 손실을 방지하기 위해 사용된다.
- 즉 한꺼번에 수행되어야 할 일련의 연산 모음
- 작업이 모두 성공적으로 완료되거 오류 발생 시 모두 롤백 되어야 한다.
- SQL 명령문을 통해 데이터의 상태를 바꿀 때마다 데이터베이스 벤더가 내부적으로
Commit을 실행하여 변경된 내역을 데이터 베이스에 반영
< 간단한 이해 예시 >
- 계좌이체는 입금과 출금으로 나뉘는데, 출금은 성공했는데 입금에 실패하면 문제가 생긴다.
- 따라서 이 두 과정은 동시에 성공하던지, 동시에 실패해야 한다.
⇒ 이 두 과정을 묶는 방법이 “ 트랜잭션 “
< 구성 >
- DML(INSERT, UPDATE, DELETE)의 집합
- DDL이나 DCL은 한 문장이 트랜잭션으로 처리
< 트랜잭션 시작과 종료 >
- 시작
- 트랜잭션의 시작 명령은 없다.
- 첫 DML이 시작되면 트랜잭션 시작된다고 생각
- 명시적 종료
- COMMIT - 트랜잭션을 반영
- ROLLBACK - 트랜잭션 취소
- 묵시적 종료
- DDL, DCL 등이 수행될 때(automatic commit)
- 시스템 오류(automatic rollback)
트랜잭션 사용하기
MYSQL은 Commit을 통해 쿼리 입력과 동시에 처리하여 데이터 베이스에 반영된다.
- 수동으로 트랜잭션 실행
- COMMIT 명령어를 만나면 변경 사항을 데이터베이스에 영구적으로 적용
-- 트랜잭션 시작
START TRANSACTION;
-- 초기 상태 보여줌
SELECT * FROM users;
-- 데이터 수정
INSERT INTO user (username, password, email) VALUES ('돌쇠', 'abcd', 'abc@naver.com');
-- 수정 상태 보여줌
SELECT * FROM users;
-- 트랜잭션을 DB에 적용
COMMIT;
-- 적용된 결과 조회
SELECT * FROM users;
- 트랜잭션 하기 전으로 롤백 하기
- Rollback 명령어를 통해 트랜잭션 하기 전으로 돌아간다.
-- 트랜잭션 시작
START TRANSACTION;
-- 초기 상태 보여줌
SELECT * FROM users;
-- 데이터 수정
INSERT INTO user (username, password, email) VALUES ('대감', 'abcd', 'abc@naver.com');
-- 수정 상태 보여줌
SELECT * FROM users;
-- 트랜잭션을 DB에 적용하지 않고, 롤백 작업 수행
ROLLBACK;
-- 적용된 결과 조회
SELECT * FROM users;
- 특정 저장 포인트를 설정하여, 생성한 포인트로 롤백 하기
- SAVEPOINT를 이용해 저장 포인트 지점을 설정
- ROLLBACK TO [세이브포인트 명]을 이용해 해당 지점으로 롤백
-- 트랜잭션 시작
START TRANSACTION;
-- 초기 상태 보여줌
SELECT * FROM users;
-- 데이터 수정
INSERT INTO user (username, password, email) VALUES ('대감', 'abcd', 'abc@naver.com');
-- 수정 상태 보여줌
SELECT * FROM users;
-- SAVEPOINT 설정
SAVEPOINT before_commit;
-- 다른 데이터 수정
INSERT INTO user (username, password, email) VALUES ('마님', 'efgh', 'efg@naver.com');
-- 수정된 상태 보여줌
SELECT * FROM users;
-- 롤백하여 SAVEPOINT까지만 복원
ROLLBACK TO before_commit;
-- 롤백 후 상태 조회
SELECT * FROM users;
-- 트랜잭션을 DB에 적용
COMMIT;
728x90
'MYSQL' 카테고리의 다른 글
CREATE / INSERT 절 (0) | 2024.05.30 |
---|---|
MYSQL 명령어 총 정리 (0) | 2024.05.26 |
SUBQUERY (0) | 2024.05.07 |
조인 (0) | 2024.05.07 |
GROUP BY (0) | 2024.05.05 |