Oracle中引用非主键字段的正确方式是什么?
Oracle中外键引用非主键字段的正确方式
你的示例里c23引用tabla1(c13)不生效,核心原因是Oracle的外键约束要求被引用的字段必须带有唯一约束(UNIQUE)或者主键约束(PRIMARY KEY)——外键需要能定位到唯一的一条记录,普通无约束的字段无法满足这个要求,所以直接引用会报错。
正确实现步骤
- 先给被引用的非主键字段添加唯一约束
可以在创建表时直接声明:
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);
- 再创建引用该字段的外键
此时tabla2的创建语句就能正常执行了:
CREATE TABLE tabla2 ( c21 CHAR(9) PRIMARY KEY, c22 VARCHAR2(10), c23 REFERENCES tabla1(c13) );
补充说明
如果需要引用的是复合字段(多个字段组合),则需要创建复合唯一约束,同时外键字段也要对应匹配复合字段的数量和数据类型。
内容的提问来源于stack exchange,提问作者Joncarre
相关产品推荐
相关产品推荐

