2011-01-10 133 views
0

我調用一個過程,它運行,並且控制檯顯示「0行受到影響」。這是MySQL程序的正常行爲嗎?MYSQL程序運行,但返回0行受影響

程序顯然正在做他們應該做的。一個程序有2個插入語句,另一個程序有插入和更新語句,我親眼看到了結果。確實有一些行受到影響。

我不確定稍後會使用該結果,但似乎我想從我的數據庫中獲得準確的響應,無論是否更新了任何內容,尤其是在預期的情況下。

想法?

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 

編輯顯示實際查詢。此外,我一直在尋找並儘可能最好,因爲我可以告訴這是一年半以前的一個已知問題。所以我想這個可以關閉。

+0

http://bugs.mysql.com/bug.php?id=44854 – Nishant 2011-01-10 22:06:12

+0

這個bug相當古老,它肯定沒有被糾正過這麼久? – JHarnach 2011-01-11 02:21:05

回答

0

東西肯定是不正確的。如果發生多個插入,sproc仍應返回受影響的行數。我使用的是相同版本的MySQL,這對我來說很好。

0

你確定你沒有做這樣的事情

...SET col1='value1' AND col2='value2'... 

代替

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

你可以發佈您的存儲過程?

0

的「0行受影響的」響應是在存儲過程中執行的最後一條語句。

通常我跟蹤通過手動計數它們實現的行數爲會話變量SP被執行後

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 
$$ 

會話變量然後可以讀出。

我不知道是否有可能通過一個值設定爲一個變量以覆蓋從ROW_COUNT()函數的響應,