当前位置:  开发笔记 > 后端 > 正文

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

如何解决《外键可以引用非唯一索引吗?》经验,为你挑选了2个好方法。

我认为一个外键意味着一行必须引用一行,但我正在看一些表肯定不是这样的表.Table1的column1在table2中的column2上有一个外键约束,但是table2中有许多记录在column2中有相同的值.column2上还有非唯一索引.这是什么意思?外键约束是否只是意味着在右列中必须存在至少一个具有正确值的记录?我认为这意味着必须有一个这样的记录(不确定空白如何适应图片,但我现在不太关心它).

更新:显然,这种行为是特定于MySQL,这是我正在使用的,但我没有在我原来的问题中提到它.



1> Hobbes..:

来自MySQL文档:

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

但是,有一个实际的理由要避免在引用表的非唯一列上使用外键.也就是说,在这种情况下,"ON DELETE CASCADE"的语义应该是什么?

文件进一步建议:

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


MySQL的5.1版文档更进一步:"处理对非唯一键[sic]或包含NULL值的键的外键引用没有很好地定义....建议使用仅引用UNIQUE和NOT NULL键的外键. "

2> chaos..:

你的分析是正确的; 键不必是唯一的,约束将作用于匹配的行集.通常不是一种有用的行为,但情况可能出现在你想要的地方.


@cdonner:嗯,我会认为*正确*会对我的回答是'伪造'有所帮助.我应该做什么,撒谎告诉你不能这样做的人因为我认为这是一个坏主意(我这样做)?是的,你可以在mysql中做到这一点.
推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有