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

外键可以引用非唯一索引吗?

壤驷承
2023-03-14
问题内容

我认为外键意味着单行必须引用单行,但是我正在查看某些表,但事实并非如此。表1在表2的列2上有一个具有外键约束的列1,但是在表2中有很多记录在列2中具有相同的值。在column2上也有非唯一索引。这是什么意思?外键约束是否仅表示至少一条记录必须存在,且在正确的列中具有正确的值?我认为这意味着必须有一个这样的记录(不确定空值是否适合图片,但目前我对此不太担心)。

更新:显然,此行为特定于MySQL,这是我所使用的,但我没有在最初的问题中提及它。


问题答案:

从MySQL文档:

InnoDB允许外键约束引用非唯一键。这是对标准SQL的InnoDB扩展。

但是,出于实际原因,要避免在引用表的非唯一列上使用外键。也就是说,在这种情况下“ ON DELETE CASCADE”的语义应该是什么?

该文档进一步建议:

对非唯一键或包含NULL值的键的外键引用的处理没有很好的html" target="_blank">定义(…)。建议您使用仅引用UNIQUE(包括PRIMARY)和NOT NULL键的外键。



 类似资料:
  • 问题内容: 如何定义一个字段,例如使用JPA批注进行索引。我们需要一个非唯一的键,因为每天在该字段上有数百万个查询,而没有键的话,它有点慢。 我已经看到了特定于hibernate的注释,但是由于我们仍在确定hibernate和数据核之间的关系,因此我试图避免使用特定于供应商的解决方案。 更新: 从JPA 2.1开始,您可以执行此操作。请参阅:此位置不允许使用注释@Index 问题答案: 使用JPA

  • 问题内容: 就性能而言,MySQL唯一索引和非唯一索引有什么区别? 假设我要在2列的组合上创建索引,并且该组合是唯一的,但是我创建了一个非唯一的索引。这会对MySQL使用的性能或内存产生重大影响吗? 同样的问题, 主 键和 唯一 索引之间有区别吗? 问题答案: UNIQUE和PRIMARY KEY是 约束 ,而不是索引。尽管大多数数据库通过使用索引来实现这些约束。除了索引之外,约束的额外开销也微不

  • 问题内容: 不知道在PostgreSQL 9.3+中是否可行,但是我想在非唯一列上创建唯一索引。对于像这样的表: 我想仅能[快速]查询不同的日子。我知道我可以用来帮助执行不同的搜索,但是如果不同值的数量大大少于索引覆盖的行数,这似乎会增加额外的开销。就我而言,大约30天中有1天与众不同。 我是创建关系表以仅跟踪唯一条目的唯一选择吗?思维: 并在每次插入数据时使用触发器来更新它。 问题答案: 索引只

  • CreateIndexes 根据struct中的tag来创建索引 CreateUniques 根据struct中的tag来创建唯一索引

  • 我在工作中继承了一个Dynamics CRM系统,运行:Version1612(8.2.2.112)(DB 8.2.2.112)。 我们所处的情况是,重复似乎通过失败的表单提交断断续续地发生,随后又重新提交。我们已经在内部发布了一个文档,解释了这种行为,并表示首先检查部分或全部事务是否真正成功是多么重要。但人类终归是人类,常常忘记... 是否有更好的解决方案,我没有,提供数据库级的一致性,并不妨碍

  • 问题内容: 我有一个清单说。我想为每个唯一值分配一个特定的“索引”来获取。 这是我的代码: 事实证明这很慢。 具有1M个元素和100K个唯一元素。我也尝试过用lambda和sort进行地图操作,这没有帮助。这样做的理想方法是什么? 问题答案: 由于执行线性搜索,然后对中的每个元素执行线性搜索,因此导致代码变慢。因此,对于每1M个项目,您要进行(最多)100K个比较。 将一个值转换为另一个值的最快方