트랜잭션 소개
- 테이블 내용을 변경하는 SQL들이 연달아 실행되며 이것들이 마치 하나의 SQL처럼 다 같이 성공하던지 아니면 실패해야 한다면 트랜잭션 사용이 필수여야 한다 !
트랜잭션이란? (1)
- Atomic하게 실행되어야 하는 SQL들을 묶어서 하나의 작업처럼 처리하는 방법
- 이는 DDL이나 DML중 레코드를 수정/추가/삭제한 것에만 의미가 있다.
- SELECT에는 트랜잭션을 사용할 이유가 없음
- BEGIN과 END 혹은 BEGIN과 COMMIT사이에 해당 SQL들을 사용
- ROLLBACK
트랜잭션이란? (2)
- 은행 계좌 이체가 아주 좋은 예다.
- 계좌 이체 : 인출과 입금의 두 과정으로 이루어짐
- 만일 인출은 성공했는데 입금이 실패한다면?
- 이 두 과정은 동시에 성공하던지 실패해야함 > Atomic하다는 의미
- 이런 과정들을 트랜잭션으로 묶어줘야 한다.
- 조회만 한다면 트랜잭션으로 묶일 이유가 없다.
트랜잭션이란? (3)
- 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를 기본으로 자주 사용한다면
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);