我有来自许多外部来源的用户,我尝试将其映射到内部userId,因此我拥有的表是:
userId, externalSourceId, externalUserId
在我的代码中,我得到externalSourceId
和externalUserId
并希望从数据库中获取userId
(如果存在),否则,创建一个并返回新创建的值。我需要这个动作是原子的,因为有几个进程可能会尝试同时做同样的事情,所以我只希望第一次创建一个userId
。
在伪代码中,它看起来像这样:
答案 0 :(得分:1)
INSERT INTO `users`
(`externalSourceId`, externalUserId)
VALUES( 10, 100)
ON DUPLICATE KEY
UPDATE userId=userId
您也可以使用insert ignore
。您可以阅读有关DUPLICATE KEY versus INSERT IGNORE
答案 1 :(得分:1)
INSERT IGNORE INTO test(Thread.sleep(10000)
,externalSourceId
)VALUES(23,32);
SELECT externalUserId
FROM test WHERE userId
= 23 AND externalSourceId
= 32;
如果externalSourceId和externalUserId被定义为唯一,则可以使用此方法。