我以为外键意味着一行必须引用一行,但我正在查看一些表,其中肯定不是这样.表1中的column1在表2中的column2上具有外键约束,但表2中有许多记录在column2中具有相同的值.第2列也有非唯一索引.这是什么意思?外键约束是否仅仅意味着至少有一条记录必须在正确的列中具有正确的值?我认为这意味着必须有一个这样的记录(不确定空值如何与图片匹配,但我现在不太担心).
更新:显然,这种行为是MySQL特有的,这就是我使用的,但我在最初的问题中没有提到.
我以为外键意味着一行必须引用一行,但我正在查看一些表,其中肯定不是这样.表1中的column1在表2中的column2上具有外键约束,但表2中有许多记录在column2中具有相同的值.第2列也有非唯一索引.这是什么意思?外键约束是否仅仅意味着至少有一条记录必须在正确的列中具有正确的值?我认为这意味着必须有一个这样的记录(不确定空值如何与图片匹配,但我现在不太担心).
更新:显然,这种行为是MySQL特有的,这就是我使用的,但我在最初的问题中没有提到.
InnoDB允许外键约束引用非唯一键.这是标准SQL的InnoDB扩展.
然而,在引用表的非唯一列上避免使用外键是有实际原因的.也就是说,在这种情况下,"ON DELETE CASCADE"的语义应该是什么?
The documentation further advises:
对非唯一键或包含空值的键的外键引用的处理没有得到很好的定义(…)建议您使用只引用唯一键(包括主键)而非空键的外键.