哪个更好的做法:'检查是否存在主要ID,然后跳过'或'插入忽略'?

问题描述 投票:0回答:1

如果我编写的系统每隔[[n分钟检查API是否有新消息,这是更好的做法? (每条消息都有一个唯一的ID,该ID在我的系统中用作主要ID。)

您是否愿意:

    在数据库中查找消息的主要ID,如果消息已经存在,则跳过将其插入
  1. 是否插入忽略?
mysql sql
1个回答
0
投票
您都没有解决方案。继续阅读。

让数据库完成工作。如果不想重复,则在列上创建唯一索引。我的猜测是:

create unique index unq_messages_messageid on messages (mesageid);

((如果您确实需要,也可以在字符串或多列上使用。)

一旦有了唯一索引或约束,以下是我建议的两种方法。

(1)只需插入一下即可。如果重复,它将失败。处理应用程序代码中的错误。好的应用程序代码可以处理错误。

((2)使用on duplicate key update(这一天可能会被on conflict ignore代替):

insert into messages ( . . . ) values ( . . .) on duplicate key update message_id = values(message_id);

该任务是无人操作-它什么都不做。

为什么比insert ignore更受欢迎?原因很简单:它仅处理重复键的特定错误。可能发生的其他错误仍返回到应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.