upSert in node.js-什么是``如果存在''



有人可以解释SQL中使用的IF存在命令吗?

例如:

if exist(select * from waiter){
    update waiter set (...) where waiter_id='somevalue'
} else{
    insert into waiter values (values)
}

您还可以解释如何在不进入数据库的情况下检查更新/插入?

我不知道这是否有帮助,但是代码应该读取:

if exist(select * from waiter where waiter_id='somevalue') {
    update waiter set (...) where waiter_id='somevalue'
} else{
    insert into waiter values (values)
}

在这种情况下,if exists . . .部分说"如果存在记录在表中"。总体而言,该声明说:"如果'somevalue'记录在该值中存在,然后更新记录;否则,插入新记录。"

您采用的方法是错误的。不起作用。停止。

去阅读有关UPSERTS的指南:

  • 插入,在PostgreSQL中的重复更新?
  • 如何在PostgreSQL?
  • 中抬高(合并,插入...在重复更新上)

,然后使用在此处记录的正确的方法之一,要么锁定表并进行UPSERT或在重试循环中进行。

了解为什么您当前的方法是错误的,请考虑两个人同时执行同一命令时会发生什么。

  • Person1:select * from waiter
  • Person2:select * from waiter
  • person1: if exist(...) => false,不,不存在
  • person2: if exist(...) => false,不,不存在
  • Person1:insert...
  • Person2:insert...

boom,您有两个记录

(这种方法也非常低效 - SELECT * FROM WAITER太可怕了)。

这就是为什么每个人都向您链接到文章和文档的链接,向您展示如何正确执行。您正在尝试解决错误的问题。您实际上是在说:"当我开车到交叉路口而不看交通信号灯时,我怎么知道其他人已经在那里?"。我们说:"嗯,不要那样。看交通信号灯。"

只有一旦您拥有实际的UPSERT("创建如果不存在")操作正确,则担心如何从node.js进行处理。

无论如何,我会说它会像其他任何查询一样:运行查询/命令,根据查询结果获得ID(现有或新创建),请根据需要使用ID。如果您需要在该部分方面提供更多帮助,请尝试在该部分上发布一个node.js特定问题,而没有所有不正确的上述代码混乱以使所有人脱离轨道。考虑到postgresql标签上的许多人对node.js都不了解。

exists语句在SQL上进行部分扫描以了解是否返回。

如果我们检查了有关 exists的性能,如果与count()进行了比较。我们会看到存在一个非常快的sql,因为计数将在数据库中检查每行。

希望它有帮助。

最新更新