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

时间:2021-03-12 12:39:05

标签: javascript mysql sql mariadb

我有以下几点:

带有 ID、标题、用户 ID 的表

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

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

    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);
  }
};

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

ALTER TABLE course_video_viewers 
ADD CONSTRAINT un_con_video_view 
UNIQUE (course_id, azure_oid);

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

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 = ?)

如果您的 MySql 版本为 5.7+,您可以省略 FROM dual

相关问题