it-source

MySQL(MariaDB) 업데이트 트랜잭션에서 '영향을 받는 0행'이 반환되는 이유는 무엇입니까?

criticalcode 2022. 12. 29. 20:30
반응형

MySQL(MariaDB) 업데이트 트랜잭션에서 '영향을 받는 0행'이 반환되는 이유는 무엇입니까?

  • 안녕하세요 여러분.

MySQL에 이상한 점이 있습니다.(아, 우선 영어가 서툴러서 죄송합니다.)

간단한 테이블과 저장 프로시저를 만들었습니다.테이블 정의는...

CREATE TABLE numTable (
    firstNum INT,
    secondNum INT
);
INSERT INTO numTable (firstNum, secondNum) VALUES (1, 2);

SP는...

DELIMITER ;;

CREATE PROCEDURE updateNum (
    IN num1 INT,
    IN num2 INT
)

BEGIN

START TRANSACTION;

    UPDATE  numTable
    SET     firstNum = num1, secondNum = num2;

COMMIT;

END ;;

DELIMITER ;

그리고 SP를 이렇게 실행했는데...

CALL updateNum (3, 4);

MySQL은...

영향을 받는 행은 0개

저는 이 결과를 보고 '구문 오류는 없나?'라고 생각했습니다.하지만 아니야.UPDATE 쿼리는 정상적으로 동작했다.numTable의 데이터가 (1, 2)에서 (3, 4)로 변경되었습니다.

그리고 이것도 찾았어요.'START TRANSACTION;' 및 'COMMIT' 문을 삭제하고 updateNum SP를 다시 실행했습니다.결과는...

영향을 받는 행 1개

이번에도 UPDATE 쿼리는 정상적으로 동작했습니다.numTable의 데이터가 정상적으로 변경되었습니다.

왜 이런 차이가 생겼을까요?TRANSACTION 스테이트먼트를 사용하여 적절한 행을 얻을 수 있는 방법이 있습니까?

MySQL 5.6.27, MariaDB 10.0.21, MariaDB 10.1.8에서 테스트한 결과 위와 같습니다.

제 질문을 읽어주셔서 감사합니다.

영향을 받는 행은 다음과 같이 가져옵니다.

ROW_COUNT()

따라서 마지막에 ROW_COUNT()를 선택합니다.

@Leow와 비슷하지만, 거래가 없으면, 업데이트 직후에 모든 것이 손실된다는 것을 알게 되었습니다.그래서:

START TRANSACTION;
update ...
select row_count() into @theCount; -- saved for posterity, perhaps for use at end
COMMIT;
select @theCount;

언급URL : https://stackoverflow.com/questions/33250091/why-mysql-mariadb-update-transaction-returns-0-row-affected

반응형