mysql 外键唯一,关于mysql:外键可以引用非唯一索引吗?

  • Post author:
  • Post category:mysql


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

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

您在谈论哪个数据库?

数据库的类型重要吗? 我本以为这是一条通用的SQL规则。

从MySQL文档中:

InnoDB allows a foreign key constraint to reference a non-unique key. This is an InnoDB extension to standard SQL.

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

该文档进一步建议:

The handling of foreign key references to nonunique keys or keys that contain NULL values is not well defined (…) You are advised to use foreign keys that reference only UNIQUE (including PRIMARY) and NOT NULL keys.

感谢您引用MySQLs文档。我没有在问题中特别提到MySQL,但这就是我所使用的。我将更新