You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数据库被引用列能否含重复值?主键引用列能否存NULL与重复值?

嘿,咱们逐个来解决你的数据库问题,说得直白点:

问题1:数据库中的被引用列是否允许包含重复值?

当然允许!被引用列(也就是外键指向的目标列)本身没有强制要求唯一,除非你给它加了UNIQUE约束或者把它设为主键。外键的核心作用只是保证引用表中的值必须在被引用表中存在,完全不限制被引用列的值重复。举个例子:如果有个products表,其中category_id外键指向categories表的id,那一个分类下可以有N个产品,categories.id要是主键不能重复,但如果被引用列不是主键/唯一约束,重复值完全合法。

问题2:T1的A列(主键)引用T2的B列,B列能否包含NULL和重复值?给出的例子是否可行?

咱们拆成两部分说:

  • NULL值的情况:T2的B列可以包含NULL,但有个关键限制:T1的A列是主键,主键的规则就是非空且唯一,所以T1里绝对不能出现A=NULL的行——哪怕T2.B有NULL,你也没法在T1中引用这个NULL值,因为违反了主键的非空约束。
  • 重复值的情况:T2的B列完全可以包含重复值,外键不限制这个。只要T1.A里的每一个非NULL值都能在T2.B中找到对应就行,哪怕T2.B里同一个值出现多次。

再看你给出的例子:

列B 列A
111 111
222 222
333 333
111 NULL

这里最后一行的列A=NULL是完全不可行的!因为T1.A是主键,主键不允许NULL值,这一行根本插不进T1表。而T2.B里的111重复是没问题的,前几行的引用关系也合法,唯独最后一行违反了主键约束。

内容的提问来源于stack exchange,提问作者ShippyDippy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 20:37:43