Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
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
Tags
more
Archives
Today
Total
관리 메뉴

개발자입니다

[비트캠프] 65일차(14주차2일) - SQL(트랜잭션, commit, rollback) 본문

네이버클라우드 AIaaS 개발자 양성과정 1기/DBMS, SQL, JDBC, Servlet

[비트캠프] 65일차(14주차2일) - SQL(트랜잭션, commit, rollback)

끈기JK 2023. 2. 7. 12:39

 

Transaction

 

여러 개의 데이터 변경 작업(insert, update, delete)을 *한 단위로 묶은 것 (*한 단위 : 모두 처리 또는 모두 취소)

 

기업 업무 중에는 여러 개의 작업을 한 단위로 다루어야 하는 경우가 있다.

예) [주문 → 결제] => 주문 완료(commit)

 

제어하는 문법 => commit / rollback

 

 

 

commit / rollback

 

① auto commit 상태

사용자1이 ① insert ② insert ③ update ④ delete 를 DBMS client 에서 하면 DBMS 에서 Table 로  auto commit 상태일 때, 입력/변경/삭제를 테이블에 즉시 적용한다.

 

 

② 수동 commit  → set autocommit = false;

사용자1이 DBMS client 에서 ① insert, insert, update, delete 를 한다. DBMS 는 임시 DB 에 ② insert, insert, update, delete 를 수행한다. 수동 commit 일 때, 입력, 변경, 삭제 결과는 임시 DB에 보관된다. 임시 DB 는 commit 명령을 받으면 임시 DB에 기록된 입력/변경/삭제 결과를 실제 테이블에 적용한다. 사용자1이 ③ select : 서버에 select를 요청하면 DBMS 는 ④ Table(실제 테이블에 들어있는 데이터) + ⑤ 임시 DB(입력/변경/삭제 데이터) 결과를 리턴한다.

 

 

 

commit / rollback => 더 자세히!

 

② 수동 commit  → set autocommit = false;

사용자들이 DBMS client 에 접속하면 스레드가 만들어지고 임시 DB 가 만들어 진다.

 

사용자1이 DBMS client 로 ① insert, insert, update, delete 하면 스레드가 임시DB 에 ② insert, insert, update, delete 한다. 사용자1이 ③ select 하면 ④ Table + ⑤ 임시DB 를 합쳐 출력한다.

 

사용자2가 DBMS client 로 ⑪ select 하면 ④ Table + ⑫ 임시DB 를 합쳐 출력한다.

 

 

③ commit  → 임시DB에 기록된 결과를 실제 테이블에 적용시킴

사용자1이 ① commit 하면 임시DB 데이터가 Table 에 ② 저장된다.

 

사용자 2가 ⑪ select 하면 ④ Table + ⑫ 임시DB 를 합쳐서 출력한다.

 

 

 

commit / rollback 

 

④ rollback  → 임시DB에 보관된 실행 결과를 제거한다.

사용자1이 ① rollback 하면 임시DB 의 결과가 제거된다.

 

사용자2가 ② rollback 하면 임시DB 의 결과 제거? 제거할게 없네!

 

 

 

select : projection / selction

 

select 에서 no, name, tel 만 따로 선택할 때 이렇게 column을 선택하는 것을 projection 이라 한다.

select 에서 working = 'Y' 만 따로 선택하는 것을 selection 이라 한다.

 

 

 

첨부파일 저장

 

① DBMS 에 파일 저장

Client 에서 Server 로 파일을 올린다. Server 는 insert + 파일 을 DBMS 에 요청한다. DBMS 에서 테이블의 특정 컬럼에 파일을 저장한다.

① 파일을 꺼낼 때 DBMS 를 경유하기 때문에 속도가 느려진다.

② 데이터베이스의 크기를 급격하게 늘린다.

→ 비효율적!

 

 

② DBMS 에 파일 경로만 저장

Client 에서 Server 로 파일을 올린다. Server 는 파일을 HDD 에 save 하고 insert + 파일 경로를 DBMS 에 요청한다. DBMS 에서 테이블의 특정 컬럼에 파일이 저장된 경로만 입력한다.

① 데이터베이스가 급격하게 커지지 않는다.

② 파일을 OS 가 읽기 때문에 속도가 빠르다.

 

 

 

첨부파일 과 테이블

 

파일을 5개 올릴수 있는 테이블에 1개만 올리면 4개 컬럼이 낭비된다.

첨부 파일이 없는 경우 5개 컬럼이 낭비된다.

7개 올리려고 할 경우 최대 5개 파일만 가능해서 두개 파일은 저장할 수 없다.

 

 

 

게시글 데이터와 첨부파일 데이터를 쪼개기

 

table 을 entity 라 한다.

 

첨부파일 테이블의 bno 를 Foreign key (다른 테이블 key 값을 저장하는 컬럼) 로 설정한다.

 

첨부파일 입장에서 게시글 1개와 관계를 맺는다.

게시글 입장에서 첨부파일 0개 이상과 관계를 맺는다.

게시글 테이블을 부모 테이블, 첨부파일 테이블을 자식 테이블이라 한다.

이 그림을 Entity Relationship Diagram (ER Diagram) - IE 표기법 이라 한다.

 

 

ER Diagram - IE 표기법

 

 

 

 

소규모 SI 팀 구조 및 역할

 

 

 

 


 

 

조언

 

*SQL 을 잘짜야 백엔드를 잘 짠다. 자바, 노드js 는 큰 소용 없다.

 

 

 


 

과제

 

학습

- eomcs-docs\sql\Exam07_1~7.sql