我有以下几点:
具有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);
}
};发布于 2021-03-12 12:57:02
最好的方法是在表中为course_id和azure_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 = ?)如果您的FROM dual版本是5.7+,则可以省略5.7+。
发布于 2021-03-12 12:54:42
看起来您应该在course_id,azure_oid上有一个唯一的索引,以防止插入重复项。然后您可以运行insert ignore into course_video_viewers...,如果它存在,它将在内部删除记录并重新插入它。
https://stackoverflow.com/questions/66600093
复制相似问题