티스토리 뷰
목차
📍 트랜잭션제어어 (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;
'DB > MySQL' 카테고리의 다른 글
데이터정의어 (DDL) — View (0) | 2023.04.05 |
---|---|
데이터정의어 (DDL) — Table (0) | 2023.03.21 |
데이터 조작어 (DML) (0) | 2023.03.20 |
서브쿼리 (SubQuery) (0) | 2023.03.14 |
그룹 함수 — 그룹화 (GROUP BY 절 / HAVING 절) (0) | 2023.03.14 |
- Total
- Today
- Yesterday
- 내장객체
- 업캐스팅
- model2
- gitbash
- 논리형
- javascript
- jsp
- mysql
- github
- 로컬저장소
- Java
- 원격저장소
- 숫자형
- 매개변수
- 인자
- Object
- 단일행함수
- Method
- 문자형
- 다형성
- DB
- 데이터타입
- Dao
- 출력문
- 주석문
- Git
- 오버라이딩
- JSTL
- null
- 제어문
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |