DB/MySQL

트랜잭션제어어 (TCL)

태로미 2023. 3. 21. 17:07

 

목차

📍   트랜잭션제어어 (TCL)

    –   Insert 구문

    –   Commit 사용

    –   Update 구문

    –   Delete 구문

    –   SavePoint 생성

    –   Delete 구문 2

    –   SavePoint 이동

 

 

 

 

 

 

 

 

 

 

📍   트랜잭션제어어 (TCL)

–   Transaction Control Language.

–   하나의 논리적인 작업 단위로,  여러 개의 DML이 하나의 트랜잭션을 구성할 수 있음.

      →   특정 작업에 관련 된 DML 구문들을 묶어서 관리하는 논리적인 작업 단위.

–   데이터베이스에서 일관성있는 작업을 진행하기 위해 사용함.

–   commit을 하지 않은 작업 내역은 다른 세션의 사용자에게 보여지지 않음.

      →   트랜잭션이 끝날때까지 행이 잠겨 다른 사용자가 작업할 수 없게 됨.

–   데이터베이스 접속 도구에 따라서 커밋의 설정값이 자동으로 커밋되는 오토커밋이 기본인 경우도 있으므로,

     미리 설정값을 확인 후 필요한 설정을 적용해서 작업을 진행할 것.

 

 

 

 

 

 

 

 

 

 

‣   트랜잭션제어 명령어

 

 

 

1.   commit

–   변경 작업을 영구히 저장하는 명령어.

–   트랜잭션의 작업 내역을 데이터베이스에 기록.

–   rollback해도 되돌아 갈 수 없음.

–   comit을 하지 않은 작업 내역다른 세션의 사용자에게 보여지지 않음.

 

 

 

2.   rollback

–   변경 작업을 트랜잭션 처음으로 되돌리는 명령어.

–   트랜잭션의 작업을 취소하여 이전 상태로 되돌림.

     →   정확하게는 commit 단위로 하여,  commit 실행 전까지 돌아감.

 

 

 

3.   savepoint

–   트랜잭션 진행 중 되돌아갈 지점을 생성하는 명령어.

 

•   savepoint 생성


SAVEPOINT 세이브포인트명;

 

•   savepoint로 롤백


ROLLBACK TO 세이브포인트명;


EX   )

 

1.   my_employee 라는 테이블 생성하시오.

CREATE TABLE my_employee
(id int PRIMARY KEY,
last_name varchar(25),
first_name varchar(25),
userid varchar(8),
salary int);

 

 

2.   열 이름을 식별하도록 my_employee 테이블의 구조를 기술하시오.

DESC my_employee;

✓   실행 결과

 

 

3.    다음 데이터를 my_employee 테이블에 추가하는 insert문을 작성하시오.  (147p 참고)

 

방법1 )   한 행씩 데이터 입력

INSERT INTO my_employee VALUES (1, 'Patel', 'Ralph', 'rpatel', 895);
INSERT INTO my_employee VALUES (2, 'Dancs', 'Betty', 'bdancs', 860);
INSERT INTO my_employee VALUES (3, 'Biri', 'Ben', 'bbiri', 1100);
INSERT INTO my_employee VALUES (4, 'Newman', 'Chad', 'cnewman', 750);

방법2 )   한번에 데이터 입력

INSERT INTO my_employee
VALUES (1, 'Patel', 'Ralph', 'rpatel', 895),
(2, 'Dancs', 'Betty', 'bdancs', 860),
(3, 'Biri', 'Ben', 'bbiri', 1100),
(4, 'Newman', 'Chad', 'cnewman', 750);

 

 

4.    테이블에 추가한 내용을 확인하시오.

SELECT * FROM my_employee;

   실행 결과

 

 

5.    테이블에 삽입한 내용을 영구히 저장하시오.

COMMIT;

 

 

6.    ID가 3인 사원의 last_name을 Drexler로 변경하시오.

UPDATE my_employee
SET last_name = 'Drexler'
WHERE id = 3;

 

 

7.    급여가 $900미만인 모든 사원에 대해 급여를 $1000로 변경하시오.

UPDATE my_employee
SET salary = 1000
WHERE salary < 900;

 

 

8.    테이블에 변경 작업한 내용을 확인하시오.

SELECT * FROM my_employee;

   실행 결과

 

 

9.    my_employee 테이블에서 Betty Dancs란 사원을 삭제하시오.

DELETE FROM my_employee
WHERE first_name = 'Betty';

 

 

10.    테이블에 변경 작업한 내용을 확인하시오.

SELECT * FROM my_employee;

✓   실행 결과

 

 

11.    보류 중인 모든 변경 사항을 커밋하시오.

COMMIT;

 

 

12.    다음 데이터를 my_employee 테이블에 추가하는 insert문을 작성하시오.

INSERT INTO my_employee VALUES (5, 'Ropeburn', 'Audrey', 'aropebur', 1550);

 

 

13.    테이블에 추가한 내용을 확인하시오.

SELECT * FROM my_employee;

   실행 결과

 

 

14.    insert 작업까지 진행한 현재 위치에 저장점(savepoint)을 생성하시오.

SAVEPOINT save;

 

 

15.    my_employee 테이블에서 모든 행을 삭제하시오.

DELETE FROM my_employee;

 

 

16.    테이블이 비어 있는지 확인하시오.

SELECT * FROM my_employee;

✓   실행 결과

 

 

17.    전의 insert 작업은 삭제하지 않은 채로 최근의 delete 작업만 취소하시오.

ROLLBACK TO save;

–   그냥 rollback이 아닌,  savepoint로 rollback 해야 함!

 

 

18.    insert 작업은 삭제하지 않은 채로 최근의 delete 작업만 취소되었는지 확인하시오.

SELECT * FROM my_employee;

   실행 결과

 

 

19.    작업한 내용을 영구히 저장하시오.

COMMIT;