HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🛁
공부기록
/
🧑🏻‍💻
TIL
/
TIL - 8

TIL - 8

태그
DB
날짜
Mar 31, 2022
속성

트랜잭션 소개

  • 테이블 내용을 변경하는 SQL들이 연달아 실행되며 이것들이 마치 하나의 SQL처럼 다 같이 성공하던지 아니면 실패해야 한다면 트랜잭션 사용이 필수여야 한다 !

트랜잭션이란? (1)

  • Atomic하게 실행되어야 하는 SQL들을 묶어서 하나의 작업처럼 처리하는 방법
    • 이는 DDL이나 DML중 레코드를 수정/추가/삭제한 것에만 의미가 있다.
    • SELECT에는 트랜잭션을 사용할 이유가 없음
    • BEGIN과 END 혹은 BEGIN과 COMMIT사이에 해당 SQL들을 사용
    • ROLLBACK

트랜잭션이란? (2)

  • 은행 계좌 이체가 아주 좋은 예다.
    • 계좌 이체 : 인출과 입금의 두 과정으로 이루어짐
    • 만일 인출은 성공했는데 입금이 실패한다면?
    • 이 두 과정은 동시에 성공하던지 실패해야함 > Atomic하다는 의미
    • 이런 과정들을 트랜잭션으로 묶어줘야 한다.
    • 조회만 한다면 트랜잭션으로 묶일 이유가 없다.

트랜잭션이란? (3)

BEGIN; -- START TRANSACNTION A의 계좌로부터 인출; B의 계좌로 입금; END; --COMMIT
  • BEGIN과 START TRANSACTION은 같은 의미
  • END와 COMMIT은 동일
  • 만일 BEGIN전의 상태로 돌아가야 한다면 ROLLBACK 실행
  • 이 동작은 autocommit 모드에 따라 달라진다.

트랜잭션 커밋 모드 : autocommit (1)

  • autocommit : True
    • 모든 레코드 수정/삭제/추가 작업이 기본적으로 바로 데이터베이스에 쓰여짐. 이를 커밋된다고 함
    • 만일 특정 작업을 트랜잭션으로 묶고 싶다면 BEGIN과 END/ROLLBACK으로 처리
  • autocommit : False
    • 모든 레코드 수정/삭제/추가 작업이 없이 commit이 호출될 때까지 커밋되지 않음
    • 즉 명시적으로 커밋을 해야함
    • ROLLBACK이 호출되면 앞서 작업들이 무시된다.

트랜잭션 커밋모드 확인

  • show variables like ‘autocommit’;
  • set autocommit=0 (혹은1)

DELETE FROM vs TRUNCATE

  • delete from table _name
    • 테이블에서 모든 레코드를 삭제
    • drop table table_name
    • where 사용해 특정 레코드만 삭제 가능
  • truncate table_name도 테이블에서 모든 레코드를 삭제
    • delete from은 속도가 느림
    • truncate이 전체 테이블의 내용 삭제시에는 여러모로 유리
    • 하지만 두가지 단점이 존재한다.
      • truncate는 where을 지원하지 않는다.
      • truncate는 transcation을 지원하지 않는다.

트랜잭션 실습 (SQL과 자바)

  • 했음.

View 소개와 실습

뷰란?

  • 자주 사용하는 SQL 쿼리(SELECT)에 이름을 주고 그 사용을 쉽게 하는 것
    • 이름이 있는 쿼리가 View로 데이터베이스단에 저장됨
      • select 결과가 테이블로 저장되는 것이 아니라 view가 사용될 때 마다 select가 실행됨
      • 그런 이유로 가상 테이블이라고 부르기도 한다.
    • CREATE OR REPLACE VIEW 뷰이름 AS SELECT …

뷰란? (2)

  • 예를들어 아래 select를 기본으로 자주 사용한다면
select s.id s.user_id, s.created, s.channel_id, c.channel from session s JOIN channel c ON c.id = s.channel_id; CREATE OR REPLACE VIEW test.session_details AS select s.id s.user_id, s.created, s.channel_id, c.channel from session s JOIN channel c ON c.id = s.channel_id; select * from test.session_details;

Stored Procedure, Trigger 소개와 실습

Stored Procedure란?

  • MySQL 서버단에 저장되는 SQL 쿼리들
    • CREATE PROCEDURE 사용
    • DROP PROCEDURE [IF EXISTS]로 제거
  • 프로그래밍 언어의 함수처럼 인자를 넘기는 것이 가능
  • 리턴되는 값은 레코드들의 집합 (SELECT와 동일)
  • 간단한 분기문(if, case)와 루프를 통한 프로그램이 가능
  • 디버깅이 힘들고 서버단의 부하를 증가시킨 다는 단점이 존재

Stored Procedure란? (2)

  • 정의문법 > DELIMITER > > CREATE PROCEDURE procedure_name(parameter_list) > > BEGIN > > select * from test.keeyoung_session_details > > END > > DELIMITER;
  • 호출 문법 > CALL stored_procedure_name(argument_list);

성능 튜닝 : Explain SQL과 Index 튜닝과 실습

다음 스텝과 맺음말