我有以下几点:
具有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
复制相似问题