날아라쩡글이의 블로그입니다.
트랜잭션, 에러찾기 tip,select문 tip 본문
728x90
반응형
- 논리적인 작업 단위를 구성하는 데이터 조작 명령문의 모음
- 중요한 개념으로 APP개발시 중요하다.
- 트랜잭션의 처리 대상
- 데이터 조작어 (DML)
- 데이터베이스 테이블에 데이터를 추가, 갱신 또는 삭제할 때 사용하는 명령어
- INSERT, UPDATE, DELETE 명령문에서 사용된다.
- 작업들을 논리적인 작업 단위로 묶는것을 의미한다.
- 예제 -- 이체하기
- 내 계좌의 잔액 감소 --UPDATE
- 상대방의 잔액이 증가 --UPDATE
- 내 계좌에 이체 발송 내역 추가 --INSERT
- 상대방 계좌에 이체 수신 내용 추가 --INSERT
- 이체하기는 4번의 DML작업으로 구성된다.
- 이 부분이 논리적인 작업단위이다.
- 예제 -- 구매하기
- 구매 정보 저장 --INSERT
- 배송 정보 저장 --INSERT
- 결제 정보 저장--INSERT
- 상품 재고 감소 --UPDATE
- 상품 판매 지수 증가 --UPDATE
- 고객의 포인트 증가--UPDATE
- 구매하기는 6번의 DML 작업으로 구성된다.
- 트랜잭션이란 중간에 에러가 날 경우 취소가 될 수있게 만드는 것이다.
- 이체하기에서 중간에 에러로 내 계좌에서 잔액만 감소가 되면 화가 날 것이다.
- 그러면 매우 화가 날 것이다. 그것을 방지해준다.
- 구매하기의 경우 쇼핑을 하면 모든게 취소되고 구매정보 처음부터 다시 작성해야하는 경우가
종종 있다. 그럴 때 ROLLBACK현상이 일어났다고 할 수 있다.
목적
- 트랜잭션 내의 명령문 하나라도 실행되지 못하면 나머지 명령문도 모두 데이터 베이스 반영이 취소가 되어야한다.
- 논리적인 작업단위 중에 하나라도 오류가 발생되면 발생전까지의 작업이 취소된다.
- 트랜잭션 내의 명령문이 모두 성공적으로 실행되면 데이터 베이스에 영구적으로 실행결과를 영구적으로 반영시킨다.
- 모두 성공이 되면 전체적인 COMMIT을 통하여 DB에 반영되는 것을 의미한다.
- 데이터의 일관성이 깨지지 않도록 하는 것이 목적이다.
트랜잭션의 처리 명령어
- COMMIT
- 트랜잭션 내의 DML실행 결과를 데이터 베이스에 반영한다.
- ROLLBACK
- 트랜잭션내의 DML실행 결과의 데이터 베이스에 반영을 전부 취소한다.
- 트랜잭션의 시작과 종료
- 시작
- 첫번째 DML명령이 실행될 때 새 트랜잭션이 자동으로 실행된다.
- 종료
- COMMIT 또는 ROLLBACK명령이 실행될 때 기존 트랜잭션이 종료된다.
- 트랜잭션이 종료되면 새로운 트랜잭션이 자동으로 시작된다.
- SQL명령어 편집툴을 종료할 떄 기존 트랜잭션이 종료된다.
- 시스템에 장애가 발생할 때 기존 트랜잭션이 종료된다.
- 시작
- COMMIT과 ROLLBACK의 이해
- COMMIT/ROLLBACK실행 이전
- 현재사용자는 SELECT문을 사용해서 DML작업결과를 검토할 수 있다.
- 현재 사용자의 DML작업결과를 COMMIT/ROLLBACK전에는 다른 사용자는 볼 수 없다.
- 현재 사용자가 작업하는 관련행은 LOCK이 걸려있기 때문에
행잠금으로 인하여 다른 사용자가 관련행의 데이터를 변경할 수 없다.- SELECT문은 조회기 때문에 데이터 변동과 상관없어 확인 할 수 있다.
- 수정전의 SELECT문을 조회가능
- 데이터를 이전 상태로 되돌릴 수 있다.
- COMMIT실행 후
- DML작업 결과가 데이터 베이스에 영구적으로 저장된다.
- 모든 사용자가 작업 결과를 볼 수 있다.
- 관련행의 행잠금이 해제되어 다른 사용자가 행을 조작할 수 있다.
- ROLLBACK실행 후
- DML작업 결과가 반영 취소가 된다.
- 데이터가 이전상태로 복구된다.
- 관련행의 행잠금이 해제 된다.
- COMMIT/ROLLBACK실행 이전
- 트랜잭션의 성질
- 원자성(Atomicity)
- 트랜잭션과 관련된 작업들은 부분적인 성공을 허용하지 않는다.
- 취소하면 전체적인 취소, 성공이면 전체적인 성공
- 일관성 (Consistency)
- 트랜잭션이 종료되면 언제나 데이터는 일관성을 유지하는 상태가 된다.
- 고립성(Isolation)
- 트랜잭션 수행 시 다른 트랜잭션이 끼어들지 못한다.
- 지속성(Durability)
- 성공적으로 수행된 트랜잭션은 데이터베이스에 영구적으로 반영된다.
- 원자성(Atomicity)
- 자바에서는 외래키의 경우 vo에 객체로 만들어서 입력을 해주어야한다.
- table의 외래키 참조는 -->객체에서 참조한 주소값을 갖고 있기 때문에 클래스로 정의하는 것이 맞다.
- 카테고리의 번호를 넣을 때 번호만 넣지 않고 카테고리의 객체가 필요하다.
- 이클립스는 자동commit이 활성화 되어있기 때문에 해제를 시켜주어야한다.
- connection = ConnectionUtil.getConnection(); //자바의 커넥션은 기본커넥션, 자동커밋이다.
connection.setAutoCommit(false);//자동커밋을 종료시킴 새로운 트랜잭션 시작- 오류확인시
- vo객체에 toString을 재정의 후 확인하는 작업이 필요하다.
- break point를 걸어놓고 디버깅을 이용한다. debug App -> 실행 -> 디버그모드 허용 perspective ->ok->오른쪽 변수 ->stepover클릭
- select 문의 join, 인라인 뷰등은 SQL Developer에서 되는지 호가인후 가져오면 좋다.
반응형
'중앙 HTA (2106기) story > JDBC story' 카테고리의 다른 글
데이터 건수가 0건 일때, null이라도 1건의 값이 나오게 하는 방법 (2) | 2024.01.26 |
---|---|
상호연관서브쿼리, 분석함수, 계층, 권한분석 (0) | 2021.11.02 |
VIEW,인덱스, 서브쿼리 (0) | 2021.10.29 |
DDL (0) | 2021.10.27 |
join, 정규화 간단 (0) | 2021.10.27 |
Comments