2

私は以下のようなmysqlにストアドプロシージャを持っています:

BEGIN
START TRANSACTION;  
    INSERT INTO tbl1 (v1,v2) VALUES (p1,p2);
    UPDATE tbl2 SET s1 = 1 WHERE s2 = s3;
    SELECT ROW_COUNT();
COMMIT
END

このクエリでは、トランザクションがコミットされなくても、row_countは1になります。実際、私の質問は、ロールバックが発生した場合に0を返すrow_countをどのように使用できるかということです。

4

1 に答える 1

3

最近同様の問題が発生しましたが、トランザクションブロック内の行数を選択し、コミット後に返すことで問題を解決できました。

BEGIN
START TRANSACTION;  
    INSERT INTO tbl1 (v1,v2) VALUES (p1,p2);
    UPDATE tbl2 SET s1 = 1 WHERE s2 = s3;
    SET @rowCount = (SELECT ROW_COUNT());
COMMIT
SELECT @rowCount;
END

これがそれを解決するための最良の方法であるかどうかはわかりませんが、私にとってはうまくいくようです:-)

于 2013-03-26T10:16:53.800 に答える