>  기사  >  데이터 베이스  >  MySQL은 트랜잭션 중첩을 지원합니까?

MySQL은 트랜잭션 중첩을 지원합니까?

藏色散人
藏色散人앞으로
2019-05-14 15:15:192665검색

최근 MySQL을 사용하고 트랜잭션을 여러 번 열 때 데이터 혼동 문제가 발생했습니다. 의사 코드는 다음과 같습니다.

begin;
# 操作1
begin;
# 操作2
rollback;

실행 후 작업 1의 데이터가 실제로 작성되었으며 데이터만 작성되었습니다. 작업 2의 데이터가 실제로 롤백되었습니다. 첫 번째 트랜잭션이 커밋되거나 롤백되지 않은 경우 두 번째 트랜잭션이 시작되면 첫 번째 트랜잭션이 자동으로 커밋됩니다.

이것은 분명히 심리적인 기대에 부합하지 않으며, 작업의 일부를 롤백하는 것도 불가능합니다. 따라서 질문은 MySQL이 트랜잭션 중첩을 지원합니까?입니다.

지원 여부에 대한 정확한 답변이 어려운 질문입니다!

우선, start를 여러 번 호출하면 MySQL에서 트랜잭션 중첩이 허용되지 않습니다. 그룹에 있는 친구의 알림을 받은 후 MySQL에 savepoint 및 Rollback to라는 명령문이 있다는 것을 알게 되었습니다.

샘플 코드:

DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
 
begin;
 
insert into `test`(`name`) values('111');
 
SAVEPOINT p1;
 
insert into `test`(`name`) values('222');
 
ROLLBACK TO p1;
 
commit;

최종 실행 결과 테스트 테이블에는 111개의 데이터만 있어 일부 작업의 롤백 작업이 구현되었습니다. 같은 방식으로 트랜잭션을 여러 번 시작하여 이전 트랜잭션이 커밋되는 문제도 방지합니다.

아마도 저장점과 명령문으로의 롤백을 트랜잭션 중첩이라고 부를 수 없으며 MySQL이 트랜잭션 중첩을 지원하는지 여부를 알 수 없습니다. 즉, 저장점과 롤백을 사용하여 일부 트랜잭션 중첩 기능을 달성할 수 있습니다.

위 내용은 MySQL은 트랜잭션 중첩을 지원합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yurunsoft.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제