데이터베이스/MySQL

[MySQL] DCL 활용(2) - 트랜잭션 COMMIT, ROLLBACK

webvillain 2021. 6. 1. 15:17

▶ DCL(Data Control Language) - 데이터 제어어

데이터베이스에 접근하거나 객체에 권한을 주는 등의 역할을 하는 언어입니다.

종류 역할
GRANT 특정 데이터베이스 사용자에게 특정 작업에 대한 사용권한 부여 한다.
REVOKE 특정 데이터베이스 사용자에게 특정 작업에 대한 사용권한을 취소 한다.
COMMIT 명령어에 의해 수행된 결과를 실제 물리적 디스크로 저장하고, 데이터베이스 조작 작업이 정상적으로 완료되었음을 관리자에게 알려준다.
ROLLBACK 트랜잭션의 조작작업이 비정상적으로 종료되었을 때  원래의 상태로 복구한다.

 

먼저, notice 테이블을 생성 후 트랜잭션을 시작해 보겠습니다.

 

▶ 테이블 생성

create table notice (
  idx int auto_increment primary key,
  title varchar(100) not null,
  content text not null,
  author varchar(20) not null,
  wr_date date not null,
  view_count int default 0
);

 

▶ 테이블 데이터 입력

insert into notice(title, content, author, wr_date) values
('첫 번째 글', '글 등록하기 1111', '관리자', '2021-05-01'),
('두 번째 글', '글 등록하기 2222', '관리자', '2021-05-10'),
('세 번째 글', '글 등록하기 3333', '관리자', '2021-05-18'),
('네 번째 글', '글 등록하기 4444', '관리자', '2021-05-27');


 

1. COMMIT  -  트랜잭션 확정

트랜잭션이 성공적으로 끝나면 데이터베이스가 새로운 일관성 상태를 가지기 위해 변경된 모든 내용을 데이터베이스에 반영하여야 하는데, 이때 사용하는 명령이 COMMIT 입니다.

 

대부분의 DBMS 제품이 Auto Commit 기능을 지원하며, MS SQL 경우에는 기본값으로 '사용하기'로 설정되어 있습니다.

Auto Commit 기능은 COMMIT 명령을 실행하지 않아도 DML문이 성공적으로 완료되면 자동으로 COMMIT 되고, DML이 실패하면 자동으로 ROLLBACK이 되는 기능입니다.

 

▶ MySQL에서 Auto Commit 설정 여부 확인하기

SELECT @@AUTOCOMMIT;

- 명령의 결과가  '1' 이면 Auto Commit이 설정된 것을 의미합니다.

 

 

▶ Auto Commit 설정값을 바꾸기

  -- Auto Commit 설정
  SET AUTOCOMMIT = TRUE; 
  
  -- Auto Commit 해지
  SET AUTOCOMMIT = FALSE;

 

2. 트랜잭션 시작하기

START TRANSACTION;

 

3. SAVEPOINT(저장점) 설정 후, 데이터 삽입, 수정, 삭제하기

-- 세이브포인트 a 생성
savepoint a;

-- 데이터 삽입
insert into notice(title, content, author, wr_date) values('다섯 번째 글', '글 등록하기 5555', '관리자', '2021-05-30');

-- 세이브포인트 b 생성
savepoint b;

-- 데이터 수정
update notice set view_count=10;

-- 데이터 삭제
delete from notice;

 

4. ROLLBACK  -  트랜잭션 취소

-- savepoint b 로 rollback
rollback to b;

-- savepoint a 로 rollback 
rollback to a;