일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 프로그래머스
- array.push()
- 코딩테스트
- 블록체인
- Where
- array.slice()
- 알고리즘
- SQL
- JavaScript
- Hackerrank
- join
- Programmers
- 코드스테이츠
- 배열
- 최강의 인생
- select
- 개발자_조이킴
- array
- MySQL
- Developer_JoyKim
- for문
- 개발자의 책장
- 자바스크립트
- 역행자
- Algorithms
- 코딩공부
- 정규표현식
- 재귀함수
- 코플릿
- node.js
Archives
- Today
- Total
CodingSpace
[얄코/갖고노는 MySQL 데이터베이스] Chapter 4. MySQL 더 깊이 알아가기 - #4. 트랜잭션 - 함께가 아니면 하지 않아! 본문
Online Class/갖고노는 MySQL 데이터베이스
[얄코/갖고노는 MySQL 데이터베이스] Chapter 4. MySQL 더 깊이 알아가기 - #4. 트랜잭션 - 함께가 아니면 하지 않아!
개발자_조이킴 2022. 9. 11. 17:27What:
- 트랜잭션 (Transaction)
- 모든 구문이 성공 OR 모든 구문이 실패
- 어떤 구문은 성공하고 어떤 구문은 실패하면 안될때 트랜잭션을 사용
- 원자성 (Atomicity)
- 은행 송금 예시
- A가 B 돈을 보냄:
- A 계좌에서 돈이 출금
- B 계좌에서 돈이 입금
- 만약, "A 계좌에서 돈이 출금"라는 SQL 구문만 실행되고, 오류가 발생하여 "B 계좌에서 돈이 입금" SQL 구문이 실행되지 않으면 서비스를 복구하는데 막대한 비용이 듬!
- 만약 위의 두 SQL 구문이 모두 성공하거나 실패하게 만들면 위와 같은 문제가 없음! → 이때 트랜잭션을 사용함
-- 트랜잭션 시작
START TRANSACTION;
DELETE FROM sections
WHERE section_id > 0;
SELECT *FROM sections;
-- 롤백
-- 롤백하기전 커밋을 하지 않았기 때문에
-- DELETE SQL 구문은 최종적으로 반영되지 않음.
ROLLBACK;
SELECT *FROM sections;
- 커밋 (COMMIT)
- 메모리상의 변화를 영구저장
-- 트랜잭션 시작
START TRANSACTION;
DELETE FROM sections
WHERE section_id > 0;
SELECT *FROM sections;
-- 커밋
COMMIT;
-- 롤백
ROLLBACK;
-- 롤백을 하기전에 커밋을 했기 때문에
-- DELETE SQL 구문이 반영됨
SELECT *FROM sections;
- SAVEPOINT
- 롤백할 중간지점 설정
-- 트랜잭션 시작
START TRANSACTION;
INSERT INTO sections
(section_name, floor)
VALUES('인도식', 2);
SAVEPOINT indian;
INSERT INTO sections
(section_name, floor)
VALUES('남미식', 3);
SELECT *FROM sections;
ROLLBACK TO indian;
SELECT *FROM sections;
COMMIT;
References.
For Developer.
- 잘못되거나 부족한 부분이 있다면 언제든지 댓글 부탁드립니다 :)
'Online Class > 갖고노는 MySQL 데이터베이스' 카테고리의 다른 글
Comments