MYSQL过程运行,但返回0行受影响

MYSQL过程运行,但返回0行受影响,mysql,stored-procedures,Mysql,Stored Procedures,我调用一个过程,它运行,控制台显示“0行受影响”。这是MySQL过程的正常行为吗 这些程序显然在做它们应该做的事情。一个过程有两个insert语句,另一个过程有一个insert和update语句,我亲眼看到了结果。确实有一些行受到影响 我不确定稍后是否会使用该结果,但似乎我希望从数据库中获得准确的响应,无论是否有任何内容被更新,尤其是在预期的情况下 想法 MySQL 5.5(如果有必要的话),程序使用自动提交语句上的事务 CREATE DEFINER=`root`@`localhost` PRO

我调用一个过程,它运行,控制台显示“0行受影响”。这是MySQL过程的正常行为吗

这些程序显然在做它们应该做的事情。一个过程有两个insert语句,另一个过程有一个insert和update语句,我亲眼看到了结果。确实有一些行受到影响

我不确定稍后是否会使用该结果,但似乎我希望从数据库中获得准确的响应,无论是否有任何内容被更新,尤其是在预期的情况下

想法

MySQL 5.5(如果有必要的话),程序使用自动提交语句上的事务

CREATE DEFINER=`root`@`localhost` PROCEDURE `create_issue`(user_id SMALLINT, title varchar(255), body LONGTEXT)
BEGIN
    DECLARE MYUSERID SMALLINT;
    DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN END;
START TRANSACTION;
    INSERT INTO tracker.issue (user_id, title, body, creation_date, last_mod_date) values (user_id, title, body, CURDATE(), CURDATE());
    UPDATE user_activity SET last_new_issue = CURDATE(), post_count = post_count + 1 WHERE user_activity.user_id = user_id;
COMMIT;
END

编辑以显示实际查询。我也一直在寻找,尽我所能,这是一个一年半前就知道的问题。所以我想这个可以关闭。

有些事情肯定不对。如果发生多个插入,存储过程仍应返回受影响的行数。我使用的是同一版本的MySQL,这对我来说很好。

有些东西肯定不对。如果发生多个插入,存储过程仍应返回受影响的行数。我使用的是同一版本的MySQL,这对我来说很好。

我想这是一个报告的bug。对于MySQL邮件列表/论坛来说,这可能是个好问题

我想这是一个报告的bug。对于MySQL邮件列表/论坛来说,这可能是个好问题

你确定你没有这样做吗

...SET col1='value1' AND col2='value2'...
而不是

...SET COL1='value1', col2='value2'...

你能发布你的存储过程吗?

你确定你没有这样做吗

...SET col1='value1' AND col2='value2'...
而不是

...SET COL1='value1', col2='value2'...
可以发布存储过程吗?

响应“0行受影响”是针对存储过程中执行的最后一条语句

通常,我通过手动将行数计入会话变量来跟踪受影响的行数

DELIMITER $$
CREATE  PROCEDURE `create_issue`(user_id SMALLINT, title varchar(255), body LONGTEXT)
BEGIN
    DECLARE MYUSERID SMALLINT;
    DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN END;
    SET @inserted_rows = 0;
    SET @updated_rows = 0;
START TRANSACTION;
    INSERT INTO tracker.issue (user_id, title, body, creation_date, last_mod_date) values (user_id, title, body, CURDATE(), CURDATE());
    SET @inserted_rows = ROW_COUNT() + @inserted_rows;
    UPDATE user_activity SET last_new_issue = CURDATE(), post_count = post_count + 1 WHERE user_activity.user_id = user_id;
    SET @updated_rows = ROW_COUNT() + @updated_rows;
COMMIT;
END
$$
然后,可以在执行SP后读取会话变量

我不确定是否可以通过将值设置为变量来覆盖ROW_COUNT()函数的响应,“0行受影响”响应是针对存储过程中执行的最后一条语句

通常,我通过手动将行数计入会话变量来跟踪受影响的行数

DELIMITER $$
CREATE  PROCEDURE `create_issue`(user_id SMALLINT, title varchar(255), body LONGTEXT)
BEGIN
    DECLARE MYUSERID SMALLINT;
    DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN END;
    SET @inserted_rows = 0;
    SET @updated_rows = 0;
START TRANSACTION;
    INSERT INTO tracker.issue (user_id, title, body, creation_date, last_mod_date) values (user_id, title, body, CURDATE(), CURDATE());
    SET @inserted_rows = ROW_COUNT() + @inserted_rows;
    UPDATE user_activity SET last_new_issue = CURDATE(), post_count = post_count + 1 WHERE user_activity.user_id = user_id;
    SET @updated_rows = ROW_COUNT() + @updated_rows;
COMMIT;
END
$$
然后,可以在执行SP后读取会话变量


我不确定是否可以通过将值设置为一个变量来覆盖ROW_COUNT()函数的响应,

该错误已经很老了,肯定没有这么长时间没有得到纠正?请尝试执行此示例,看看是否返回受影响的实际行数。如果不是,那就是一个bug。这个bug很老了,肯定没有这么长时间没有被纠正吗?试着执行这个例子,看看是否返回受影响的实际行数。如果没有,那就是一个bug。即使这样,也应该返回
queryok,xx行受影响(0.05秒)
,而查询将没有效果。这里OP说查询实际上是有效的,但是通知是不正确的。只是和想法。也许你应该发布你的SP。是的,我会发布下面的内容。即使这样,也会返回
Query OK,xx行受影响(0.05秒)
,而查询将没有效果。这里OP说查询实际上是有效的,但是通知是不正确的。只是和想法。也许你应该发布你的SP。是的,我会在下面发布一些东西。