MySQL 데이터베이스 트 랜 잭 션 격 리 단계 소개(Transaction Isolation Level)

데이터베이스 격 리 단 계 는 네 가지 가 있 는데 라 는 책의 설명 을 응용 한다.



그리고 트 랜 잭 션 격 리 단 계 를 수정 하 는 방법 에 대해 말씀 드 리 겠 습 니 다.
1.전역 수정,mysql.ini 프로필 수정,마지막 에 추가

 # :READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.
 [mysqld]
 transaction-isolation = REPEATABLE-READ
여기 서 전역 기본 값 은 REPEATABLE-READ 입 니 다.사실 MySQL 은 원래 기본 값 도 이 단계 입 니 다.
2.현재 session 을 수정 하고 mysql 클 라 이언 트 에 로그 인 한 후 명령 을 실행 합 니 다.

my sql 에 autocommit 인자 가 있다 는 것 을 기억 하 십시오.기본 값 은 on 입 니 다.그의 역할 은 모든 단독 조회 가 하나의 업무 이 고 자동 으로 시작 되 며 자동 으로 제출 되 는 것 입 니 다.(실행 이 끝 난 후에 자동 으로 끝 납 니 다.select for update 를 적용 하려 면 start transaction 을 수 동 으로 호출 하지 않 으 면 이 for update 의 줄 잠 금 체 제 는 소 용이 없습니다.줄 자 물 쇠 는 자동 으로 제출 한 후에 방출 됩 니 다).따라서 트 랜 잭 션 격 리 단계 와 잠 금 체 제 는 start transaction 을 명시 적 으로 호출 하지 않 더 라 도 이러한 체 제 는 단독 조회 문 에 도 적 용 됩 니 다.잠 금 의 작 동 을 분석 할 때 이 점 을 주의해 야 합 니 다.
잠 금 메커니즘:공유 잠 금:읽 기 표 작업 에 추 가 된 잠 금,잠 금 을 추가 한 후 다른 사용 자 는 이 표 나 줄 의 공유 잠 금 만 가 져 올 수 있 고 열 쇠 를 가 져 올 수 없습니다.즉,읽 기 만 할 수 있 고 쓸 수 없습니다.
열 쇠:쓰기 표 작업 에 추 가 된 자물쇠 입 니 다.자 물 쇠 를 추가 한 후 다른 사용자 들 은 이 표 나 줄 의 자 물 쇠 를 가 져 올 수 없습니다.전형 적 인 것 은 my sql 사무 입 니 다.

start transaction;
select * from user where userId = 1 for update;
이 말 을 실행 하고 나 면
1)다른 트 랜 잭 션 이 공유 자 물 쇠 를 가 져 오 려 면 트 랜 잭 션 격 리 단계 가 SERIALIZABLE 인 트 랜 잭 션 을 실행 합 니 다.

  select * from user;
 SERIALIZABLE 의 selection 문 구 는 공유 자 물 쇠 를 가 져 와 야 하기 때문에 걸 립 니 다.
2)기타 업무 수행

select * from user where userId = 1 for update;
update user set userAge = 100 where userId = 1;
for update 는 이 줄 의 데 이 터 를 가 져 올 수 있 기 때문에 이전 트 랜 잭 션 이 열 려 있 을 때 까지 기 다 려 야 계속 진행 할 수 있 습 니 다.
잠 금 범위:
줄 잠 금:특정한 줄 의 기록 에 잠 금 표 잠 금:전체 시계 에 잠 금 을 추가 합 니 다.
이렇게 조합 하면'행 급 공유 자물쇠,표 급 공유 자물쇠,행 급 배타 자물쇠,표 급 배타 자물쇠'가 있다.
다음은 서로 다른 트 랜 잭 션 격 리 단계 의 인 스 턴 스 효 과 를 말씀 드 리 겠 습 니 다.예 를 들 어 InnoDB 를 사용 하여 두 개의 클 라 이언 트 A,B 를 엽 니 다.A 에서 트 랜 잭 션 격 리 단 계 를 수정 하고 B 에서 트 랜 잭 션 을 열 고 데 이 터 를 수정 한 다음 에 A 에서 트 랜 잭 션 수정 효 과 를 봅 니 다.
1.READ-UNCOMMITTED(제출 되 지 않 은 내용 읽 기)단계
1)A.트 랜 잭 션 단 계 를 수정 하고 트 랜 잭 션 을 시작 하여 user 표 에 대해 조회 합 니 다.
   
2)B 기록 갱신
   
3)이때 B 사 무 는 아직 제출 되 지 않 았 습 니 다.A 는 사무 내 에서 조 회 를 한 번 했 는데 조회 결과 가 바 뀐 것 을 발 견 했 습 니 다.
   
4)B 트 랜 잭 션 스크롤 백 진행
   
5)A 가 다시 한 번 조회 하 자 조회 결과 가 다시 바 뀌 었 다
   
6)A 표 는 사용자 표 데 이 터 를 수정한다
   
7)B 표 가 업 무 를 다시 시작 한 후에 user 표 기록 을 수정 하고 시간 이 초 과 될 때 까지 수정 되 었 으 나 다른 데이터 에 대한 수정 이 성공 한 것 은 A 의 수정 이 user 표 의 데이터 줄 에 공유 자 물 쇠 를 추가 하 는 것 을 설명 한다(select 를 사용 할 수 있 기 때문이다).
   
READ-UNCOMMITTED 격 리 단 계 를 알 수 있 듯 이 두 업무 가 동시에 진 행 될 때 업무 가 제출 되 지 않 더 라 도 수정 한 것 이 사무 내 조회 에 영향 을 미 칠 수 있 는데 이런 단 계 는 분명히 안전 하지 않다.그러나 표 가 한 줄 을 수정 할 때 이 줄 에 줄 공유 자 물 쇠 를 추가 합 니 다.
2.READ-COMMITTED(제출 내용 읽 기)
1)A 의 트 랜 잭 션 격 리 단 계 를 설정 하고 트 랜 잭 션 에 들 어가 조회 하기
   
2)B 사 무 를 시작 하고 기록 을 수정한다
   
3)A 가 다시 user 표를 조회 한 결과 기록 에 영향 을 받 지 않 았 다.
   
4)B 제출 사무
   
5)A.다시 user 표를 조회 한 결과 기록 이 수정 되 었 음 을 발견
   
6)A 사용자 테이블 수정
   
7)B 는 업 무 를 다시 시작 하고 user 표 와 같은 항목 을 수정 한 결과 시간 이 초 과 될 때 까지 수정 이 걸 렸 으 나 다른 기록 을 수정 하 는 데 성공 했다.이 는 A 의 수정 이 user 표 에 줄 공유 자 물 쇠 를 추가 했다 는 것 을 의미한다(select 가 가능 하기 때문이다)
   
   
READ-COMMITTED 트 랜 잭 션 격 리 단 계 는 트 랜 잭 션 을 제출 한 후에 만 다른 트 랜 잭 션 에 영향 을 주 고 표를 수정 할 때 표 데이터 줄 에 줄 공유 잠 금 을 추가 합 니 다.
3.REPEATABLE-READ(다시 읽 기 가능)
1)A 트 랜 잭 션 격 리 단 계 를 설정 하고 트 랜 잭 션 에 들 어가 서 한 번 조회
   
2)B 사 무 를 시작 하고 user 표 수정
   
3)A 사용자 테이블 데이터 보기,데이터 변경 없 음
   
4)B 제출 사무
   
5)A 다시 한 번 조회 한 결과 변화 가 없 었 다
   
6)A 사 무 를 제출 한 후 결 과 를 확인 한 결과 업데이트 되 었 습 니 다.
   
7)A 사 무 를 다시 시작 하고 user 표 수정
   
   
8)B 표 는 다시 사 무 를 시작 하고 user 표를 수정 하 며 수정 이 걸 렸 습 니 다.시간 이 지 날 때 까지 다른 기록 을 수정 하 는 데 성 공 했 습 니 다.이 는 A 표 가 수정 할 때 줄 공유 자 물 쇠 를 추가 한 것 을 설명 합 니 다(select 가능)
   
   
REPEATABLE-READ 트 랜 잭 션 격 리 단 계 는 두 개의 트 랜 잭 션 이 동시에 진 행 될 때 한 개의 트 랜 잭 션 수정 데 이 터 는 다른 트 랜 잭 션 에 영향 을 주지 않 고 수 정 된 트 랜 잭 션 이 제출 되 더 라 도 다른 트 랜 잭 션 에 영향 을 주지 않 습 니 다.
트 랜 잭 션 에서 어떤 기록 을 수정 하면 기록 에 줄 공유 자 물 쇠 를 추가 하여 트 랜 잭 션 이 끝 날 때 까지 풀 어 줍 니 다.
4.SERIERLIZED(직렬 화 가능)
1)A 의 트 랜 잭 션 격 리 단 계 를 수정 하고 조회
   
2)B 가 시 계 를 조회 하여 정상적으로 결 과 를 얻 으 면 user 표 에 대한 조회 가 가능 하 다 는 것 을 알 수 있다.
   
3)B 는 업 무 를 시작 하고 기록 을 수정 합 니 다.A 업무 가 제출 되 지 않 았 기 때문에 B 의 수정 은 대기 상태 에 있 습 니 다.A 업무 가 끝 날 때 까지 기다 리 고 마지막 에 시간 을 초과 한 것 은 A 가 user 표 에 조회 작업 을 한 후에 표 에 공유 자 물 쇠 를 추가 한 것 을 설명 합 니 다.
   
SERIALIZABLE 사무 격 리 등급 이 가장 엄격 하여 조 회 를 진행 할 때 표 나 줄 에 공유 자 물 쇠 를 추가 하고 다른 사 무 는 이 표 에 대해 읽 기 동작 만 할 수 있 으 며 쓰기 동작 은 할 수 없다.

좋은 웹페이지 즐겨찾기