Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

세션이 DBA에 의해 종료되면 현재 MySQL 트랜잭션은 어떻게 됩니까?


세션이 트랜잭션 도중에 종료되면 현재 MySQL 트랜잭션이 MySQL에 의해 롤백되고 종료된다고 가정합니다. 이는 현재 트랜잭션에서 수행된 모든 데이터베이스 변경 사항이 제거됨을 의미합니다. 세션이 종료될 때 n 암시적 롤백이라고 합니다.

예시

테이블 'marks'에 다음 값이 있다고 가정합니다.

mysql> 표시에서 * 선택;+------+---------+-----------+----+| 아이디 | 이름 | 주제 | 표시 |+------+---------+----------+----+| 1 | 아라브 | 수학 | 50 || 1 | 가혹한 | 수학 | 55 || 3 | 가우라프 | 비교 | 69 || 4 | 라훌 | 역사 | 40 || 5 | 야슈라즈 | 영어 | 48 || 6 | 마낙 | 역사 | 70 |+------+---------+---------+---------+6행 세트(0.00초) 

이제 새 트랜잭션을 시작하고 테이블 'marks'에서 행을 삭제합니다.

mysql> START TRANSACTION;쿼리 OK, 영향을 받는 행 0개(0.00초)mysql> id =4인 마크에서 삭제, 쿼리 OK, 영향 받은 행 1개(0.00초)

COMMIT 또는 ROLLBACK 전에 다른 창을 열어 MySQL의 다른 인스턴스를 실행하고 다음과 같이 SHOW PROCESSLIST 명령을 실행하십시오 -

mysql> SHOW PROCESSLIST\G****************************** 1. 행 *********** ************* 아이디:2 사용자:루트 호스트:localhost:49303 db:queryCommand:절전 시간:22 상태:정보:NULL************ ***************** 2. 행 *************************** ID:3 사용자:루트 호스트:localhost:49350 db:NULL명령:쿼리 시간:0 상태:NULL 정보:집합의 processlist2 행 표시(0.00초)

이제 다음과 같이 KILL 명령을 실행하여 현재 트랜잭션을 종료합니다. -

mysql> KILL 2;쿼리 OK, 영향을 받는 행 0개(0.00초)

이제 현재 트랜잭션으로 돌아가 COMMIT 명령이 다음과 같이 실행될 때 -

mysql> COMMIT;ERROR 2006(HY000):MySQL 서버가 연결되지 않았습니다. 재연결 시도 중...연결 ID:4현재 데이터베이스:queryQuery OK, 영향을 받는 행 0개(1.01초)

현재 세션을 종료한 위의 KILL 명령은 MySQL이 현재 트랜잭션에서 수행된 변경 사항을 롤백하도록 합니다. 다음 쿼리에서 'marks' 테이블에서 삭제된 행이 없음을 알 수 있습니다.

mysql> 표시에서 * 선택;+------+---------+-----------+----+| 아이디 | 이름 | 주제 | 표시 |+------+---------+----------+----+| 1 | 아라브 | 수학 | 50 || 1 | 가혹한 | 수학 | 55 || 3 | 가우라프 | 비교 | 69 || 4 | 라훌 | 역사 | 40 || 5 | 야슈라즈 | 영어 | 48 || 6 | 마낙 | 역사 | 70 |+------+---------+---------+---------+6행 세트(0.00초)