当前位置: 首页 > 面试题库 >

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

阎扬
2023-03-14
问题内容

我有一个表,用于存储有关某些事件重复发生的值,例如,与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仅具有星期一值,但我希望该值具有其余值,例如星期三和星期五。如何添加约束来解决此问题?


问题答案:

您要在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扩展。



 类似资料:
  • 问题内容: 每次我通过贝宝付款时,我的信息都会在数据库中捕获,但我想防止重复。那么我该如何解决呢?还是应该检查电子邮件重复项? 编辑 据我所知,pinnaclecart将uid设置为primary。所以将它设置为唯一不是“危险”吗? 问题答案: 名字和姓氏都很好,但是除了唯一之外,其他一切都没有。我认识几个与我同名的人,因此我猜想在这两列上建立唯一索引只会令人沮丧,而无济于事。但是,使我与众不同的

  • 问题内容: 我想防止使用vb.net和MySQL作为数据库的清单表单中出现重复条目​​,这是我的代码: 结束子 我在搜索答案时发现了这个问题,但是当我尝试运行它时,它没有读取插入命令,而是即使没有相同的人员ID也会直接转到msbox“人员ID已经存在”。 有人可以检查为什么不阅读插入内容, 我的数据库表值: pcode =主键 lname =长文本 fname =长文本 办公室=长文本 名称=长文

  • 问题内容: 我想知道如何防止在数据库表中使用两个相同的标签。有人说我在表中使用两个私钥。但是,W3Schools-网站表示这是不可能的。 问题答案: 我已经更新了NORMA模型,使其与您的图表更加匹配。我可以看到您在哪里犯了一些错误,但是其中一些错误可能是由于我的早期模型造成的。 我已更新此模型以防止重复标签。以前真的没关系。但是,既然您想要它,这里就是(对于Postgres): 请注意,现在有一

  • 问题内容: 我将“父母”表单嵌入到另一个“学生”表单中,该表单包含一个学生的父母的数据,并且具有“多对一”关联。 当一个新的学生注册被记录时,他的父母在数据库的另一个表中。然后,如果作为现有兄弟的新学生需要注册,这意味着父母已经在数据库中注册,则应阻止父母再次在数据库中注册,只能升级。 有人告诉我可以使用数据转换器解决此问题,但是我不知道如何使用它。如果有人可以帮助我,我将不胜感激。我在这里留下代

  • 问题内容: 我想创建一个表来存储设备设置。该表具有三行:id,parameter_name和parameter_value。 该表是通过执行以下查询语句创建的: 然后通过执行以下方法存储行: 创建数据库后,将存储默认值: 但是,方法insertRow()的问题在于它无法防止重复输入。 有谁知道在这种情况下如何防止重复输入? 问题答案: 您可以使用列约束。 UNIQUE约束导致在指定列上创建唯一索引

  • 问题内容: 说我像这样创建一些对象类 现在,我想创建一个arraylist来容纳许多这样的对象类。 我想包含某种逻辑,以便在这种情况下…当我们尝试添加对象“ second”而不是向arrayList添加新对象时,我们将second.getNum()添加到first.getNum()。因此,如果要遍历ArrayList,它将是 我在想出一种优雅的方式来解决这个问题时遇到了麻烦。随着arraylist