반응형
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
반응형
'MySql' 카테고리의 다른 글
MySQL 다중 왼쪽 조인 (0) | 2020.12.18 |
---|---|
MySQL crontab에서 비밀번호가없는 mysqldump (0) | 2020.12.18 |
MySQL mysql-하위 쿼리에 필드 값 전달 (0) | 2020.12.18 |
MySQL innodb-log-file-size 변경 방법 (0) | 2020.12.18 |
MySQL MYSQL은 특정 값과 같은 각 열의 수를 얻습니다. (0) | 2020.12.18 |
댓글