예외 시 MySQL 트랜잭션 롤백
트랜잭션의 모든 MySQL 명령이 성공적으로 실행되거나 전체 트랜잭션이 롤백되는지 확인하려는 경우 오류가 발생한 경우. 일반적인 접근 방식에는 오류 처리와 함께 try/catch 블록이나 저장 프로시저를 사용하는 것이 포함됩니다. 그러나 더 다양한 옵션은 MySQL에서 DECLARE ... HANDLER 구문을 활용하는 것입니다.
DECLARE ... HANDLER 구문을 사용하면 지정된 SQL 예외가 발생할 때 실행되는 핸들러를 정의할 수 있습니다. 이 기능을 활용하면 오류 발생 시 트랜잭션을 자동으로 롤백하도록 MySQL을 구성할 수 있습니다.
구현 방법은 다음과 같습니다.
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 ;
이 예에서는 ' sp_fail'은 SQL 예외 처리기를 사용하여 생성됩니다. 트랜잭션 실행 중 예외가 발생하면 핸들러는 '_rollback' 플래그를 '1'로 설정합니다. 모든 SQL 문이 실행된 후 IF 문은 '_rollback' 값을 확인합니다. '1'이면 ROLLBACK 문을 사용하여 트랜잭션을 롤백한다. 그렇지 않으면 COMMIT 문을 사용하여 트랜잭션이 커밋됩니다.
이 기술을 활용하면 MySQL 트랜잭션이 완전히 실행되거나 완전히 롤백되어 부분 업데이트나 데이터 불일치를 방지할 수 있습니다.
위 내용은 예외 발생 시 MySQL 트랜잭션 롤백을 어떻게 보장할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!