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

사용자가 현재 MySQL 트랜잭션을 어떻게 암시적으로 종료할 수 있습니까?


다음은 현재 MySQL 트랜잭션을 암시적으로 종료할 수 있는 방법입니다. −

DDL 문 실행

현재 MySQL 트랜잭션은 암시적으로 종료되고 CREATE 또는 DROP 데이터베이스, Create, ALTER 또는 DROP 테이블 또는 저장된 루틴과 같은 DDL 문을 실행하여 변경 사항이 커밋됩니다. MySQL에서는 이러한 명령문을 롤백할 수 없기 때문입니다.

mysql> START TRANSACTION;쿼리 OK, 0행 영향(0.00초)mysql> INSERT INTO MARKS Values(3,'gaurav','Comp',69);쿼리 OK, 1행 영향(0.26초)mysql> 테이블 생성 학생(id int, Name Varchar(10),);쿼리 OK, 영향을 받는 행 0개(0.84초)

트랜잭션 사이에 DDL 문을 실행하므로 이 트랜잭션은 암시적으로 종료됩니다. MySQL은 모든 변경 사항을 저장하며 롤백할 수 없습니다. 다음 결과 세트의 도움으로 이를 관찰할 수 있습니다 -

mysql> 롤백, 쿼리 확인, 영향을 받는 행 0개(0.00초) mysql> 표시에서 * 선택;+------+---------+-------- ---+----+| 아이디 | 이름 | 주제 | 표시 |+------+---------+----------+----+| 1 | 아라브 | 수학 | 50 || 1 | 가혹한 | 수학 | 55 || 3 | 가우라프 | 비교 | 69 |+------+---------+-----------+----+셋트의 행 3개(0.00초) 

클라이언트 세션 연결 해제

클라이언트 세션의 연결을 끊으면 현재 세션이 암시적으로 종료되며 이 경우 변경 사항이 롤백됩니다.

클라이언트 세션 종료

클라이언트 세션을 종료하면 현재 세션도 암시적으로 종료되며 이 경우 변경 사항도 롤백됩니다.

START TRANSACTION 명령으로

START TRANSACTION 명령을 실행하면 현재 트랜잭션이 암시적으로 종료됩니다. 이 경우 변경 사항이 커밋됩니다.

mysql> START TRANSACTION;쿼리 OK, 0행 영향(0.00초)mysql> INSERT INTO Marks Values(4, 'Rahul','History',40);Query OK, 1행 영향(0.00초)mysql> INSERT INTO Marks Values(5, 'Yashraj','English',48);쿼리 OK, 1행 영향(0.00초)mysql> START TRANSACTION;쿼리 OK, 0행 영향(0.00초)

이 예에서 START TRANSACTION 문은 암시적으로 트랜잭션을 종료하고 변경 사항이 커밋됩니다.

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