* 트랜잭션과 트랜잭션 제어어(TCL)
* 트랜잭션이란? 하나의 논리적인 작업단위
- 하나이상의 DML이 모여서 하나의 트랜잭션이 구성됨.
- 트랜잭션제어어(TCL)
1. commit : 변경작업을 저장
2. rollback : 변경작업을 취소
3. savepoint : 트랜잭션 진행 중 되돌아갈 지점(기점)
- 첫번째 DML이 시작되면 새려운 트랜잭션이 시작됐구나 생각하면된다. 내가 select하면 임시데이터를 보여주고 다른 사람은 원본 데이터를 보게됨. 내가 commit을 하면 임시가 아니라 모든 사람이 수정데이터를 보게됨. commit 하고나면 돌이킬 수 없다.
- 워크벤치에 Auto-commit transaction 기능이 켜져있다. 그럼 DML이 시작디자마자 오토커밋이 바로 시작되면서 명령어 하나에 커밋을 해버리는 것이다. = 명령어 하나에 하나씩 트랜잭션을 실행한다.
- autocommit 기능 활용 시 장단점
● autocommit 기능 비활성화
1. 장점 : DML 작업 후 자동 저장되므로 편함.
2. 단점 : DML 작업 실수 시 되돌릴 수 없음.
● autocommit 기능 비활성화
1. 장점 : DML 작업 후 미리보기 가능함. DML 작업 실수 시 되돌릴 수 있다.
2. 단점 : DML 작업 후 commit, rollback으로 트랜잭션을 마무리해야 함.
- autocommit 해제 후 실습하기
● 워크벤치에서 해제하는 방법 : [Query] - [auto commit transactions] 체크해제
[TCL1] commit 활용
-- 트랜잭션 시작
update employees
set salary = salary + 500
where department_id = 30;
select employee_id, last_name, salary, department_id from employees
where department_id = 30; -- 미리보기, 임시 data 상태
update departments
set manager_id = 200
where department_id = 120;
select * from departments
where department_id = 120; -- 미리보기, 임시 data 상태
commit; -- DB에 변경 작업 영구히 저장됨.
-- 트랜잭션 종료
-- 트랜잭션 시작
update employees
set email = 'ABCDE'
where employee_id = 108;
select employee_id, last_name, email from employees
where employee_id = 108; -- 미리보기, 임시 data 상태
delete from departments
where department_id = 130;
select from departments; -- 미리보기, 임시 data 상태
[TCL2] rollback 활용
- 평소에는 오토커밋 기능 쓰고, 대량의 작업이 있을 때는 끄고 commit을 따로 한다던지 한다고 한다.
rollback; -- 변경작업 취소, 트랜잭션의 처음으로 돌아감.
-- 트랜잭션 종료
[TCL3] savapoint 활용
- 트랜잭션 진행 중 되돌아갈 지점(기점, 포인트)을 생성하는 명령어
- savepoint를 활용하면 트랜잭션 진행 중 부분 취소가 가능함.
- 오토커밋중에는 DML 마다 커밋하니까 사용할 틈이 없다. savepoint를 여러개 했다(1,2,3,4,5)가 3번으로 돌아가면 4,5는 지워진다. commit 하면 savepoint 다 날아간다.
-- 트랜잭션 시작
update employees
set email = 'ABCDE'
where employee_id = 203;
select employee_id , last_name, email from employees
where employee_id = 203; -- 미리보기
savepoint test1;
delete from departments
where DEPARTMENT_ID = 200;
select * from departments; -- 미리보기
rollback to test1; -- test1 저장점으로 되돌아감. (delete 작업 취소)
delete from departments
where department_id = 210;
select * from departments; -- 미리보기
commit;
-- 트랜잭션 종료
'자바스프링웹공부(2024) > 마이에스큐엘' 카테고리의 다른 글
2024.09.04. 테이블정의어(DDL) - table, 제약조건 (0) | 2024.09.08 |
---|---|
2024.09.02. 제약조건. alter. (0) | 2024.09.03 |
2024.08.28. 데이터조작어(DML) - insert, update, delete (2) | 2024.09.01 |
2024.08.13. 서브쿼리(subquery) - 단일행 서브쿼리, 다중행 서브쿼리 (0) | 2024.08.17 |
2024.08.13. 그룹함수, group by, having 절 (0) | 2024.08.13 |