2011-12-29 9 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():既存の行が更新された場合、行が新しい行及び2として挿入されている場合INSERTについて... DUPLICATE KEY UPDATEステートメントで、影響を受けた、行の値が1です。 "

+0

私に正しいリンク先を教えていただきありがとうございます。私はちょうどチェックし、別々にクエリを実行するときにうまくいきますが、ストアドプロシージャでは、キーが存在する場合は3を取得しています。なぜ私はストアドプロシージャで3つを取得しているか分からない。私はまだそれをデバッグしています – Bujji

+0

それは3つの結果を得ている、それ以外の場合は2つの期待通りになっている私は、おなかを使用して手順を実行すると、おかしい問題です。ありがとうございました – Bujji

0

また、このような何か行うことができます - 例えば、

テーブルに新しい「フラグ」フィールドを追加し、UPDATEにINSERTまたは2に1をセットします

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; 

この場合、情報はテーブルに保存されます。