Oracle SQL如何为当前表字段设置自引用外键约束?
自引用外键的配置方法及报错解决
你要设置的是自引用外键(字段引用同表内的其他行),报错原因很明确:数据库要求外键所引用的目标列必须是PRIMARY KEY(主键)或者UNIQUE(唯一约束)列,你的att列没满足这个要求,所以触发了"no matching unique or primary key for this column-list"错误。
解决步骤如下:
- 第一步,先给
att列添加主键或唯一约束(根据业务需求选择):- 若
att列无重复值且非空,适合设为主键:ALTER TABLE a ADD PRIMARY KEY (att); - 若
att列允许空值但不能有重复值,适合加唯一约束:ALTER TABLE a ADD CONSTRAINT att_unique UNIQUE (att);
- 若
- 第二步,再执行你原来的外键创建语句:
ALTER TABLE a ADD CONSTRAINT a_fk FOREIGN KEY (att) REFERENCES a (att);
补充说明:自引用外键常用于存储层级结构数据,比如部门表的「父部门ID」引用同表的「部门ID」(部门ID是主键),这种场景下本身就满足外键引用的约束要求,不会报错。
内容的提问来源于stack exchange,提问作者Grandmarkkk
相关产品推荐
相关产品推荐

