SQL 1 SQL 2 SQL 3 COMMIT DATABASE
커밋과 롤백 SQL 1 SQL 2 SQL 3 COMMIT 트랜잭션 시작 트랜잭션 종료 DATABASE LABORATORY 트랜잭션 종료 ROLLBACK
실습 #1 Commit과 Rollback 실습 (1) std_heap 테이블을 다시 생성함 Ø DROP TABLE std_heap; Ø CREATE TABLE std_heap ( stid int, name char(20), grade int, age int, addr char(60), dno int ) ENGINE=Inno. DB; (2) 트랜잭션 실행 준비 Ø SET autocommit = 0; Ø SET sql_safe_updates = 0; Ø SET TRANSACTION ISOLATION LEVEL READ COMMITTED; (3) COMMIT/ROLLBACK 실습 Ø Ø Ø Ø INSERT INTO std_heap VALUES INSERT INTO std_heap VALUES COMMIT; SELECT * FROM std_heap ; DATABASE LABORATORY (101, (102, (105, (106, (110, 'JS Kim', 3, 22, 'Chuncheon', 3); ‘PK Lee', 2, 21, ‘Seoul', 1); ‘AB Park', 2, 20, ‘Wonju', 2); ‘CD Hwang', 1, 19, ‘Chuncheon', 2); ‘XY Choi', 2, 21, ‘Seoul', 3);
(3) COMMIT/ROLLBACK 실습 (계속) Ø Ø INSERT INTO std_heap VALUES (201, ‘EE Moon', 2, 22, 'Kangrung', 1); INSERT INTO std_heap VALUES (202, ‘PL Lim', 3, 23, 'Chuncheon', 4); ROLLBACK; SELECT * FROM std_heap ; Ø UPDATE std_heap SET name WHERE stid = 101; Ø SELECT * FROM std_heap ; Ø COMMIT; Ø UPDATE std_heap SET name WHERE stid = 102; Ø ROLLBACK; Ø UPDATE std_heap SET name WHERE stid = 102; Ø COMMIT; Ø UPDATE std_heap SET name WHERE stid = 102; Ø ROLLBACK; Ø SELECT * FROM std_heap ; DATABASE LABORATORY = ‘XX XXXX’, grade = 9 = ‘AA AAAA’, grade = 7 = ‘BB BBBB’, grade = 8 = ‘CC CCCC’, grade = 9
Maria. DB 세션 여러개 실행(1) DATABASE LABORATORY
Maria. DB 세션 여러개 실행(2) DATABASE LABORATORY
Maria. DB 세션 여러개 실행(3) DATABASE LABORATORY
Maria. DB 세션 여러개 실행(4) DATABASE LABORATORY
v 다른 트랜잭션에 의해 값이 덮혀쓰이는지 테스트 트랜잭션 T 1 트랜잭션 T 2 READ UNCOMMITTED 모드 SET autocommit = 0; SET sql_safe_updates = 0; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT name FROM std_heap WHERE stid = 101; UPDATE std_heap SET name = ‘YY YYYY’ WHERE stid = 101; UPDATE std_heap SET name = ‘ZZ ZZZZ’ WHERE stid = 101; SELECT name FROM std_heap WHERE stid = 101; COMMIT; 왜 ZZ ZZZZ가 COMMIT; 아닐까요? DATABASE LABORATORY
v 다른 트랜잭션에 의해 값의 변경이 취소되는지 테스트 트랜잭션 T 1 트랜잭션 T 2 READ UNCOMMITTED 모드 SELECT name FROM std_heap WHERE stid = 101; UPDATE std_heap SET name = ‘AA AAAA’ WHERE stid = 101; UPDATE std_heap SET name = ‘BB BBBB’ WHERE stid = 101; COMMIT; ROLLBACK; COMMIT을 ROLLBACK 전에 실행하는 것이 불가능함!! SELECT name FROM std_heap WHERE stid = 101; DATABASE LABORATORY
실습 #3 허상 읽기 실습 v 허상 읽기 발생 테스트 트랜잭션 T 1 트랜잭션 T 2 READ UNCOMMITTED 모드 SELECT name FROM std_heap WHERE stid = 101; UPDATE std_heap SET name = ‘CC CCCC’ WHERE stid = 101; SELECT name FROM std_heap WHERE stid = 101; ROLLBACK; SELECT name FROM std_heap WHERE stid = 101; COMMIT; DATABASE LABORATORY
v 허상 읽기 발생 방지 테스트 트랜잭션 T 1 트랜잭션 T 2 READ UNCOMMITTED 모드 READ COMMITTED 모드 SET TRANSACTION ISOLATION LEVEL READ COMMITTED; SELECT name FROM std_heap WHERE stid = 101; UPDATE std_heap SET name = ‘CC CCCC’ WHERE stid = 101; SELECT name FROM std_heap WHERE stid = 101; ROLLBACK; SELECT name FROM std_heap WHERE stid = 101; COMMIT; DATABASE LABORATORY
실습 #4 비 반복적 읽기 실습 v 아래 각 트랜잭션의 SELECT 결과를 화면 캡처하고, 그 이유를 작성하여 제출하시오. Ø (1) READ COMMITTED 모드 트랜잭션 T 1 트랜잭션 T 2 READ UNCOMMITTED 모드 READ COMMITTED 모드 SET TRANSACTION ISOLATION LEVEL READ COMMITTED; SELECT name FROM std_heap WHERE stid = 101; UPDATE std_heap SET name = ‘CC CCCC’ WHERE stid = 101; COMMIT; SELECT name FROM std_heap WHERE stid = 101; COMMIT; DATABASE LABORATORY
Ø (2) REPEATABLE READ 모드 트랜잭션 T 1 트랜잭션 T 2 READ UNCOMMITTED 모드 REPEATABLE READ 모드 SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; SELECT name FROM std_heap WHERE stid = 101; UPDATE std_heap SET name = ‘DD DDDD’ WHERE stid = 101; COMMIT; SELECT name FROM std_heap WHERE stid = 101; COMMIT; DATABASE LABORATORY
실습 #4 직렬화 (유령 레코드 읽기) v 아래 각 트랜잭션의 SELECT 결과를 화면 캡처하고, 그 이유를 작성하여 제출하시오. Ø (1) REPEATABLE READ 모드 – 유령 레코드 발생 트랜잭션 T 1 트랜잭션 T 2 READ UNCOMMITTED 모드 REPEATABLE READ 모드 SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; SELECT stid, name FROM std_heap WHERE stid >= 102 AND stid <= 105; INSERT INTO std_heap VALUES (103, ‘KK KKKK’, 3, 20, ‘Chuncheon’, 2); COMMIT; SELECT name FROM std_heap WHERE stid >= 102 AND stid <= 105; COMMIT; DATABASE LABORATORY
Ø (2) SERIALIZABLE 모드 – 유령 레코드 방지 트랜잭션 T 1 트랜잭션 T 2 READ UNCOMMITTED 모드 SERIALIZABLE 모드 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; DELETE FROM std_heap WHERE stid = 103; COMMIT; SELECT stid, name FROM std_heap WHERE stid >= 102 AND stid <= 105; INSERT INTO std_heap VALUES (103, ‘KK KKKK’, 3, 20, ‘Chuncheon’, 2); COMMIT; SELECT stid, name FROM std_heap WHERE stid >= 102 AND stid <= 105; COMMIT; DATABASE LABORATORY
- Slides: 20