为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁华开满天机 2019-12-03 15:53:54
我认为外键意味着单行必须引用单行,但是我正在查看某些表,但事实并非如此。表1在表2的列2上有一个具有外键约束的列1,但是在表2中有很多记录在列2中具有相同的值。在column2上也有非唯一索引。这是什么意思?外键约束是否仅表示至少一条记录必须存在,且在正确的列中具有正确的值?我认为这意味着必须有一个这样的记录(不确定空值是否适合图片,但目前我对此不太担心)。更新:显然,此行为特定于MySQL,这是我所使用的,但我没有在最初的问题中提及它。
查看完整描述

3 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

从MySQL文档:


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


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


该文档进一步建议:


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


查看完整回答
反对 回复 2019-12-03
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

您的分析是正确的;键不必是唯一的,约束将作用于匹配行的集合。通常这不是有用的行为,但是可能会出现您想要的情况。


查看完整回答
反对 回复 2019-12-03
  • 3 回答
  • 0 关注
  • 756 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信