用于在表中创建或更新行的MySQL过程

时间:2012-11-22 21:43:02

标签: mysql stored-procedures

我想编写一个带有userIduserName的MySQL proc,并根据users users.userId = userId中p>

我在这里看到了类似的问题:MySql create or update row with ip?

但我想在存储过程中执行此操作,并想知道是否提供了任何其他工具?

1 个答案:

答案 0 :(得分:2)

您不需要存储过程,可以使用INSERT ... ON DUPLICATE KEY UPDATE ...。假设userid是PRIMARYUNIQUE密钥,这将起作用:

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 ;