我有来自许多外部源的用户,我尝试将它们映射到内部 userId,所以我的表是:
userId, externalSourceId, externalUserId
在我的代码中,我正在获取 externalSourceId
和 externalUserId
并希望从数据库获取 userId
(如果存在),否则,创建一个并返回新创建的值。我需要这个操作是原子的,因为多个进程可能会尝试同时做同样的事情,所以我希望只有第一次才能创建一个 userId
。
在伪代码中,它看起来像这样:
- u = 使用 (externalSourceId, externalUserId) 查找用户
- 如果没有你:
2.1. u = 使用 (externalSourceId, externalUserId) 和随机 userId 创建新用户 - 返回您
最佳答案
INSERT INTO `users`
(`externalSourceId`, externalUserId)
VALUES( 10, 100)
ON DUPLICATE KEY
UPDATE userId=userId
您还可以使用插入忽略
。您可以阅读更多关于 DUPLICATE KEY versus INSERT IGNORE
关于MySQL-选择或插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50172584/