트랜잭션제어어 (TCL)
목차
📍 트랜잭션제어어 (TCL)
📍 트랜잭션제어어 (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;