首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据条目是否已经存在而有条件地插入mariadb

如何根据条目是否已经存在而有条件地插入mariadb
EN

Stack Overflow用户
提问于 2021-03-12 12:39:05
回答 2查看 80关注 0票数 0

我有以下几点:

具有ID、标题、用户标识的表

目前,我的逻辑是,当查看某个媒体时,它会被输入数据库以存储视图历史记录。

现在,我试图防止重复的条目被插入。这是我尝试过的代码,它仍然在复制条目。

代码语言:javascript
运行
复制
    dataAccessor.viewers = {
  add: ({ courseId, viewerOid }) => {
    const query =
      "IF NOT EXISTS (SELECT * FROM course_video_viewers WHERE course_id = ? AND WHERE azure_oid = ?) INSERT INTO course_video_viewers (course_id, azure_oid) VALUES (?, ?)";

    const inputs = [courseId, viewerOid];

    return sendQueryAndReturnResultsAsPromise(query, inputs);
  }
};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-12 12:57:02

最好的方法是在表中为course_idazure_oid列的组合添加一个唯一的约束

代码语言:javascript
运行
复制
ALTER TABLE course_video_viewers 
ADD CONSTRAINT un_con_video_view 
UNIQUE (course_id, azure_oid);

如果不能更改表的定义,可以使用INSERT ... SELECT语句:

代码语言:javascript
运行
复制
INSERT INTO course_video_viewers (course_id, azure_oid) 
SELECT ?, ?
FROM dual
WHERE NOT EXISTS (SELECT * FROM course_video_viewers WHERE course_id = ? AND WHERE azure_oid = ?)

如果您的FROM dual版本是5.7+,则可以省略5.7+。

票数 0
EN

Stack Overflow用户

发布于 2021-03-12 12:54:42

看起来您应该在course_id,azure_oid上有一个唯一的索引,以防止插入重复项。然后您可以运行insert ignore into course_video_viewers...,如果它存在,它将在内部删除记录并重新插入它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66600093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档