小编典典

防止数据库中的重复值-MySQL

sql

我有一个表,用于存储有关某些事件重复发生的值,例如,与id=1发生在星期一,星期三和星期五的事件,以及与id=2发生在星期一和星期三的事件。所以我的桌子是这样的:

id  event_id  day
1      1      Monday
2      1      Wednesday
3      1      Friday
4      2      Monday
5      2      Wednesday

我的问题是有时(并非总是)我的脚本在数据库中插入重复的值,因此我的表的事件1和2的重复发生率是两倍,如下面的表所示:

id  event_id  day
1      1      Monday
2      1      Wednesday
3      1      Friday
4      2      Monday
5      2      Wednesday
1      1      Monday
2      1      Wednesday
3      1      Friday
4      2      Monday
5      2      Wednesday

如果我UNIQUE在列中添加约束,event_id则事件1仅具有星期一值,但我希望该值具有其余值,例如星期三和星期五。如何添加约束来解决此问题?


阅读 225

收藏
2021-04-14

共1个答案

小编典典

您要在event_id 上使用唯一索引day

create unique index idx_recurrence_event_day on recurrence(event_id, day)

这样可以防止不必要的重复。

如果您已经有重复项,可以使用多种方法来消除它们。但是,如果每行都有一个唯一的ID,会更容易,这就是为什么自动递增主键在所有表中都有用的原因之一。

即使没有唯一ID,也要摆脱它们的一种方法是使用:

alter ignore table recurrence add unique (event_id, day);

我个人不喜欢这种方法,因为添加索引不应删除行,但这是有效的MySQL扩展。

2021-04-14