개발자 미니민의 개발스터디

[JAVA] 자바 - 트랜잭션(Transaction)

by mini_min
[JAVA]
자바 - 트랜잭션(Transaction) 

✔️ 트랜잭션란?

: 트랜잭션은 하나의 논리적 작업 단위! 일련의 작업이다.

: 시스템에서 사용되는 쪼갤 수 없는 업무 단위이다!

 

◼️ 트랜잭션 예시 : 계좌이체

계좌 출금 -> 계좌 입금 -> 모든 거래 기록이 하나의 작업 단위로 모두 처리되어야한다.

 

⭐ 일관된 데이터베이스에서 정상적인 트랜잭션이 수행되면 다시 일관된 상태가 되어야한다!

위에 작업 중 하나의 작업이라도 정상 수행되지 않으면, 무결성이 깨져서 손해보는 상황이 발생한다.

 

 

 

✔️ 트랜잭션 특징

: 원자성 : 트랜잭션은 하나도 수행되지 않거나 모두 수행되어야한다.

: 일관성 : 모든 데이터는 일관되어야한다.

: 현재 접근하고 있는 데이터는 다른 트랜잭션으로부터 격리되어야한다.

getAutoCommit() --연결된 Connection 객체의 트랜잭션 모드를 반환!
setAutoCommit() --연결된 Connection 객체의 트랜잭션 모드 설정! false 또는 true

Commit();
rollback();

 

 

-- 예시

@Override
	public int deleteMember(String id) throws SQLException {
		PreparedStatement pstmt = null;
		String sql;
		int result = 0;
		
		try {
			conn.setAutoCommit(false);
			
			sql = "DELETE FROM member2 WHERE id = ?";
			
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, id);
			result = pstmt.executeUpdate();
			pstmt.close();
			pstmt=null;
			
			
			sql = "DELETE FROM member1 WHERE id = ?";
			
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, id);
			result = pstmt.executeUpdate();
			
			conn.commit();
			

		} catch (SQLException e) {
			try {
				conn.rollback();
			} catch (Exception e2) {
			}
			e.printStackTrace();
			throw e;
			
			
		} finally {
			if(pstmt != null) {
				try {
					pstmt.close();
				} catch (Exception e2) {
				}
			}
			try {
				conn.setAutoCommit(true);
			} catch (Exception e2) {
			}
		}
		
		return result;
	}
💡 conn.setAutoCommit(false);
: sql 2개가 각각 하나씩 자동으로 커밋되지 않도록 막는다.
: 2개의 테이블에 데이터를 넣을 때, sql 하나하나가 바로 커밋되면 문제가 생길 수 있으니까 설정을 바꾸는 것

2개의 sql 모두 정상적으로 실행되었으면 conn.commit(); 한다.
만약 sql 문법 오류가 있으면 conn.rollback(); 한다.
모든 작업이 끝나고 conn.setAutoCommit(true); 한다.

 

 

 

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기