我认为一个外键意味着一行必须引用一行,但我正在看一些表肯定不是这样的表.Table1的column1在table2中的column2上有一个外键约束,但是table2中有许多记录在column2中有相同的值.column2上还有非唯一索引.这是什么意思?外键约束是否只是意味着在右列中必须存在至少一个具有正确值的记录?我认为这意味着必须有一个这样的记录(不确定空白如何适应图片,但我现在不太关心它).
更新:显然,这种行为是特定于MySQL,这是我正在使用的,但我没有在我原来的问题中提到它.
来自MySQL文档:
InnoDB允许外键约束引用非唯一键.这是标准SQL的InnoDB扩展.
但是,有一个实际的理由要避免在引用表的非唯一列上使用外键.也就是说,在这种情况下,"ON DELETE CASCADE"的语义应该是什么?
文件进一步建议:
对非唯一键或包含NULL值的键的外键引用的处理没有很好地定义(...)建议您使用仅引用UNIQUE(包括PRIMARY)和NOT NULL键的外键.
你的分析是正确的; 键不必是唯一的,约束将作用于匹配的行集.通常不是一种有用的行为,但情况可能出现在你想要的地方.