MySQL - 选择或插入

时间:2018-05-04 10:17:23

标签: mysql node.js

我有来自许多外部来源的用户,我尝试将其映射到内部userId,因此我拥有的表是:

userId, externalSourceId, externalUserId

在我的代码中,我得到externalSourceIdexternalUserId并希望从数据库中获取userId(如果存在),否则,创建一个并返回新创建的值。我需要这个动作是原子的,因为有几个进程可能会尝试同时做同样的事情,所以我只希望第一次创建一个userId

在伪代码中,它看起来像这样:

  1. u =使用(externalSourceId,externalUserId)
  2. 查找用户
  3. 如果没有你:
    2.1。 u =使用(externalSourceId,externalUserId)和随机userId
  4. 创建新用户
  5. return u

2 个答案:

答案 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被定义为唯一,则可以使用此方法。