1

行がどこに存在するかに応じて、テーブルに挿入または更新を実行userIdするMySQLプロシージャを作成したいuserNameusersusers.userId = userId

私はここで同様の質問を見ました:MySqlはipで行を作成または更新しますか?

しかし、これをストアドプロシージャで実行したいので、追加のツールが提供されるかどうか疑問に思いました。

4

1 に答える 1

2

ストアド プロシージャは必要ありません。使用できますINSERT ... ON DUPLICATE KEY UPDATE ...PRIMARYuserid がまたはUNIQUEキーであると仮定すると、これは機能します。

INSERT INTO user
SET 
userid = ?,
userName = ?
ON DUPLICATE KEY UPDATE
userName = VALUES(userName)

もちろん、必要に応じて、このクエリをストアド プロシージャでラップすることもできます。

DROP PROCEDURE IF EXISTS set_user;

DELIMITER //

CREATE PROCEDURE set_user(
    IN i_userid INT UNSIGNED,
    IN v_userName VARCHAR(50)
)
DETERMINISTIC
MODIFIES SQL DATA
SQL SECURITY INVOKER
BEGIN
    INSERT INTO user
    SET 
    userid = i_userid,
    userName = v_userName
    ON DUPLICATE KEY UPDATE
    userName = VALUES(userName);
END;
//

DELIMITER ;
于 2012-11-22T21:52:08.783 に答える