>데이터 베이스 >MySQL 튜토리얼 >MySQL 트랜잭션의 예외에 대한 자동 롤백을 어떻게 구현할 수 있습니까?

MySQL 트랜잭션의 예외에 대한 자동 롤백을 어떻게 구현할 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-07 06:48:11204검색

How Can I Implement Automated Rollback on Exceptions in MySQL Transactions?

MySQL 트랜잭션 처리: 예외 롤백

MySQL의 맥락에서 트랜잭션은 다음과 같이 실행되는 일련의 데이터베이스 작업을 포함합니다. 단일 논리 유닛. 기본적으로 트랜잭션 내의 명령 중 하나라도 오류가 발생하면 전체 트랜잭션이 롤백되어 데이터 무결성이 보장됩니다. 그러나 롤백 동작을 명시적으로 제어하려는 상황이 있습니다.

모든 예외에 대해 자동화된 롤백을 달성하는 한 가지 방법은 MySQL의 DECLARE ... HANDLER 구문을 사용하는 것입니다. 이를 통해 사용자는 트랜잭션 실행 중에 SQLEXCEPTION이 발견될 경우 실행되는 핸들러 함수를 지정할 수 있습니다.

이 작동 방식을 보여주기 위해 다음 예를 고려하십시오.

DELIMITER $$

CREATE PROCEDURE `sp_fail`()
BEGIN
    DECLARE `_rollback` BOOL DEFAULT 0;
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET `_rollback` = 1;
    START TRANSACTION;
    INSERT INTO `tablea` (`date`) VALUES (NOW());
    INSERT INTO `tableb` (`date`) VALUES (NOW());
    INSERT INTO `tablec` (`date`) VALUES (NOW()); -- FAIL
    IF `_rollback` THEN
        ROLLBACK;
    ELSE
        COMMIT;
    END IF;
END$$

DELIMITER ;

이 절차에서 , 오류가 발생한 경우 플래그를 지정하기 위해 _rollback 변수를 선언합니다. SQLEXCEPTION이 발견될 때 이 플래그를 1로 설정하도록 핸들러가 정의됩니다. 그런 다음 트랜잭션 내에서 원하는 데이터베이스 작업을 실행합니다. 모든 작업이 시도된 후 _rollback 플래그를 확인하고 오류가 발생한 경우에만 ROLLBACK을 발행합니다. 그렇지 않으면 트랜잭션을 커밋합니다.

이 기술을 사용하면 트랜잭션 수준 오류가 롤백을 트리거하여 데이터베이스를 일관된 상태로 유지하는 원하는 동작을 유지하도록 할 수 있습니다.

위 내용은 MySQL 트랜잭션의 예외에 대한 자동 롤백을 어떻게 구현할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.