본문 바로가기
MySql

MySQL mysql 트랜잭션-모든 예외에서 롤백

by 베이스 공부 2020. 12. 18.
반응형

mysql 명령 목록에 오류가 발생하면 자동으로 롤백 할 수 있습니까?

예를 들어 다음과 같은 내용이 있습니다.

begin transaction;

insert into myTable values1 ...
insert into myTable values2 ...;  -- will throw an error

commit;

이제 실행시 전체 트랜잭션이 실패하기를 원하므로 myTable에서 values1을 볼 수 안됩니다 . 그러나 불행히도 트랜잭션에 오류가 있어도 테이블은 값 1로 채워집니다.

롤백하는 방법에 대한 아이디어가 있습니까? (다시 말하지만, 오류가있는 경우)?

편집-DDL에서 표준 SQL로 변경

 

해결 방법

 


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 ;


 

참조 페이지 https://stackoverflow.com/questions/19905900

 

 

반응형

댓글