2011-12-29 48 views
1

我有定義爲如下所示的MySQL存儲過程:MYSQL程序 - INSERT INTO返回值

DROP PROCEDURE IF EXISTS TEST_LOCATION; 

CREATE PROCEDURE `TEST_LOCATION`() 
    BEGIN 
     DECLARE VCount tinyint(1) DEFAULT 1; 

     INSERT INTO my_counts_model (type,code,model_code,count) 
     VALUES  (1,1,456,1) 
     ON DUPLICATE KEY UPDATE count = count + 1;  
END; 

的過程更新,如果type,code,model_code在表中的值的計數,否則插入一個新記錄。我的意思是關鍵在type,code,model_code

我想知道它是一個新插入還是計數更新的進一步操作。我試圖檢查INSERT INTO的返回值,但找不到語法或任何解決方案。

回答

1

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_row-count

「ROW_COUNT():對於INSERT ... ON DUPLICATE密鑰更新語句,則受影響的行值是1,如果如果現有的行被更新的行被插入作爲一個新的行和2。 「

+0

謝謝你指點我到正確的鏈接。我剛剛檢查過,當我單獨運行查詢時工作正常,但是在存儲過程中,如果密鑰存在,我會得到3。我不確定爲什麼我在存儲過程中獲得3。我仍在調試它 – Bujji 2011-12-29 19:10:46

+0

這是一個蟾蜍問題,如果我運行使用蟾蜍的過程,我得到的結果爲3,否則我得到兩個預期。再次感謝你 – Bujji 2011-12-30 10:25:39

0

你也可以做這樣的事情 -

新的「標記」字段添加到表,並設置1對INSERT或2 UPDATE,例如

INSERT INTO my_counts_model (type, code, model_code, count, flag) 
VALUES (1, 1, 456, 1, 1) 
ON DUPLICATE KEY UPDATE count = count + 1, flag = 2; 

在這種情況下,信息將被存儲在表中。