我有一个表,用于存储有关某些事件重复发生的值,例如,与id=1发生在星期一,星期三和星期五的事件,以及与id=2发生在星期一和星期三的事件。所以我的桌子是这样的:
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仅具有星期一值,但我希望该值具有其余值,例如星期三和星期五。如何添加约束来解决此问题?
UNIQUE
event_id
您要在event_id 和 上使用唯一索引day:
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扩展。