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

Oracle中引用非主键字段的正确方式是什么?

Oracle中外键引用非主键字段的正确方式

你的示例里c23引用tabla1(c13)不生效,核心原因是Oracle的外键约束要求被引用的字段必须带有唯一约束(UNIQUE)或者主键约束(PRIMARY KEY)——外键需要能定位到唯一的一条记录,普通无约束的字段无法满足这个要求,所以直接引用会报错。

正确实现步骤

  1. 先给被引用的非主键字段添加唯一约束
    可以在创建表时直接声明:
CREATE TABLE tabla1 (
    c11 CHAR(9) PRIMARY KEY,
    c12 VARCHAR2(10),  
    c13 INTEGER UNIQUE, -- 给c13添加唯一约束
    CHECK(c13 <= 100)
);

也可以在表创建完成后通过ALTER TABLE添加:

ALTER TABLE tabla1 ADD CONSTRAINT uk_tabla1_c13 UNIQUE (c13);
  1. 再创建引用该字段的外键
    此时tabla2的创建语句就能正常执行了:
CREATE TABLE tabla2 (
    c21 CHAR(9) PRIMARY KEY,
    c22 VARCHAR2(10),  
    c23 REFERENCES tabla1(c13)
);

补充说明

如果需要引用的是复合字段(多个字段组合),则需要创建复合唯一约束,同时外键字段也要对应匹配复合字段的数量和数据类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:16:09