> 데이터 베이스 > MySQL 튜토리얼 > 예외 발생 시 MySQL 트랜잭션을 자동으로 롤백하려면 어떻게 해야 합니까?

예외 발생 시 MySQL 트랜잭션을 자동으로 롤백하려면 어떻게 해야 합니까?

Patricia Arquette
풀어 주다: 2024-11-26 07:30:14
원래의
303명이 탐색했습니다.

How Can MySQL Transactions Be Automatically Rolled Back on Exception?

데이터 무결성 보호: 예외 발생 시 MySQL 트랜잭션 롤백

데이터베이스 관리의 주요 원칙 중 하나는 데이터의 무결성과 일관성을 유지하는 것입니다. . 트랜잭션은 오류 발생 시 여러 데이터베이스 작업이 완전히 커밋되거나 롤백되도록 하는 데 중요한 역할을 합니다.

과제: 오류 시 자동 롤백

고려하세요. 다음 시나리오: 일련의 MySQL 명령이 트랜잭션 내에서 실행됩니다. 그러나 명령 중 하나(두 번째 명령)에 오류가 발생했습니다. 예상되는 동작은 전체 트랜잭션이 실패하고 롤백되어 불완전한 데이터가 데이터베이스에 기록되는 것을 방지하는 것입니다. 그러나 오류로 인해 트랜잭션이 롤백되지는 않는 것으로 나타났습니다.

해결책: DECLARE ... HANDLER 구문

이 문제를 처리하기 위해 MySQL은 다음을 제공합니다. 다양한 유형의 예외에 대한 사용자 정의 핸들러를 정의할 수 있는 DECLARE ... HANDLER 구문. 이 구문을 사용하면 오류가 발생할 경우 트랜잭션을 자동으로 롤백할 수 있습니다.

다음 코드 조각은 DECLARE ... HANDLER 구문을 활용하여 자동 롤백을 수행하는 방법을 보여줍니다.

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 ;
로그인 후 복사

이 코드에서는 DECLARE CONTINUE HANDLER FOR SQLEXCEPTION 문을 사용하여 사용자 지정 핸들러를 선언합니다. SQL 예외가 발생하면 _rollback 변수가 1로 설정되어 트랜잭션이 롤백되어야 함을 나타냅니다. 마지막에 있는 IF ... THEN ... ELSE 문은 _rollback 값을 확인하고 그에 따라 ROLLBACK 또는 COMMIT를 실행합니다.

이 접근 방식을 사용하면 트랜잭션 실행 중에 발생한 오류가 발생하면 오류가 발생합니다. 롤백하여 데이터베이스가 일관되고 유효한 상태로 유지되도록 합니다.

위 내용은 예외 발생 시 MySQL 트랜잭션을 자동으로 롤백하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿