개발자입니다
[비트캠프] 65일차(14주차2일) - SQL(트랜잭션, commit, rollback) 본문
[비트캠프] 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
'네이버클라우드 AIaaS 개발자 양성과정 1기 > DBMS, SQL, JDBC, Servlet' 카테고리의 다른 글
[비트캠프] 67일차(14주차4일) - JDBC(JDBC API), myapp-35 (0) | 2023.02.09 |
---|---|
[비트캠프] 66일차(14주차3일) - SQL(ER Diagram, JOIN) (0) | 2023.02.08 |
[SQL] 예제 소스 정리 - ORDER BY, JOIN, 서브 쿼리, GROUP BY, HAVING (0) | 2023.02.07 |
[SQL] 예제 소스 정리 - DDL, DML, DQL (0) | 2023.02.06 |
[비트캠프] 64일차(14주차1일) - DBMS, SQL(mariaDB: 사용자, database, primary key, unique) (0) | 2023.02.06 |