行がどこに存在するかに応じて、テーブルに挿入または更新を実行userId
するMySQLプロシージャを作成したいuserName
users
users.userId = userId
私はここで同様の質問を見ました:MySqlはipで行を作成または更新しますか?
しかし、これをストアドプロシージャで実行したいので、追加のツールが提供されるかどうか疑問に思いました。
行がどこに存在するかに応じて、テーブルに挿入または更新を実行userId
するMySQLプロシージャを作成したいuserName
users
users.userId = userId
私はここで同様の質問を見ました:MySqlはipで行を作成または更新しますか?
しかし、これをストアドプロシージャで実行したいので、追加のツールが提供されるかどうか疑問に思いました。
ストアド プロシージャは必要ありません。使用できますINSERT ... ON DUPLICATE KEY UPDATE ...
。PRIMARY
userid がまたは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 ;