최근 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!