一尘不染

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

mysql

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

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


阅读 367

收藏
2020-05-17

共1个答案

一尘不染

MySQL文档

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

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

该文档进一步建议

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

2020-05-17