我想编写一个带有userId
和userName
的MySQL proc,并根据users
{}中是否存在行来插入或更新到表users.userId = userId
中p>
我在这里看到了类似的问题:MySql create or update row with ip?
但我想在存储过程中执行此操作,并想知道是否提供了任何其他工具?
答案 0 :(得分:2)
您不需要存储过程,可以使用INSERT ... ON DUPLICATE KEY UPDATE ...
。假设userid是PRIMARY
或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 ;