데이터 무결성 보호: 예외 발생 시 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!