我有以下几点:
带有 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);
}
};
答案 0 :(得分:1)
看起来您应该在 course_id,azure_oid
上有一个唯一索引,这样可以防止插入重复项。然后您可以运行 insert ignore into course_video_viewers...
,它会在内部删除记录(如果存在)并重新插入。
答案 1 :(得分:0)
最好的做法是在表中为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 = ?)
如果您的 MySql 版本为 5.7+,您可以省略 FROM dual
。