postgresql 在创建外键关联时报错。?报错-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

postgresql 在创建外键关联时报错。?报错

2020-06-08 14:07:46 536 1

中文资料太少。

抛出错误描述:there-is-no-unique-constraint-matching-given-keys-for-referenced-table

异常描述如:https://stackoverflow.com/questions/27159951/there-is-no-unique-constraint-matching-given-keys-for-referenced-table

 

我有一张user表,其中有user_type,需要做外键关联。

关联的另外一张表是,common_type,是一个公共的类型表中,type_value。

user表包含,id,user_type,....

common_type 包含,id,type_code ,type_value,type_name。

取消 提交回答
全部回答(1)
  • 爱吃鱼的程序员
    2020-06-08 14:07:59

    http://wiki.navicat.com/wiki/index.php/Why_I_cannot_successfully_create_the_foreign_keys%3F

    要在MySQL中声明外键,用户应该牢记几点:1.两个表都必须是InnoDB类型。2.在引用的表中,必须有一个索引,其中引用的列以相同顺序列为第一列。3.不支持外键列上的索引前缀。4.InnoDB需要外键和引用键的索引,以便可以快速检查外键而不需要表扫描。5.两个关键字段必须具有兼容的字段类型。6.整数类型的大小和符号必须相同。7.字符串类型的长度不一定相同。8.外键名称在数据库中必须是唯一的。9.如果指定了SETNULL操作,请确保您没有将子表中的列声明为NOTNULL。
    要在PGSQL中声明外键,用户应该牢记几点:1.FOREIGNKEY约束必须引用PRIMARYKEY或UNIQUE约束。2.两个关键字段必须具有兼容的数据类型。3.必须对引用表和引用表都有REFERENCES权限。
    要在Oracle中声明外键,用户应牢记几点:1.FOREIGNKEY约束必须引用PRIMARYKEY或UNIQUE约束。2.两个关键字段必须具有兼容的数据类型。3.复合外键限制为32列。4.必须有权限访问父表和子表。

    阿里巴巴开发手册建议,供参考:

    【强制】不得使用外键与级联,一切外键概念必须在应用层解决。说明:(概念解释)学生表中的student_id是主键,那么成绩表中的student_id则为外键。如果更新学生表中的student_id,同时触发成绩表中的student_id更新,则为级联更新。外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险;外键影响数据库的插入速度。

     

    @头号大宝贝回复 @头号大宝贝:你可以在pojo/model类设计上做关联,数据库外键在我们项目里也基本去掉了感谢。

    外键应该在另一个表中是唯一的,你是不是没有把type_value标记为唯一

    引用来自“chaozhang”的评论

    外键应该在另一个表中是唯一的,你是不是没有把type_value标记为唯一

    type_value不可能唯一。

    因为这是一个公共的类型表,存在这样的数据例子,code,value,name

    USER_TYPE,1,普通用户。

    USER_TYPE,2,VIP用户。

    GAME_TYPE,1,xx1游戏。

    GAME_TYPE,2,xx2游戏。

    引用来自“头号大宝贝”的评论

    引用来自“chaozhang”的评论

    外键应该在另一个表中是唯一的,你是不是没有把type_value标记为唯一

    type_value不可能唯一。

    因为这是一个公共的类型表,存在这样的数据例子,code,value,name

    USER_TYPE,1,普通用户。

    USER_TYPE,2,VIP用户。

    GAME_TYPE,1,xx1游戏。

    GAME_TYPE,2,xx2游戏。

    引用来自“头号大宝贝”的评论

    引用来自“chaozhang”的评论

    外键应该在另一个表中是唯一的,你是不是没有把type_value标记为唯一

    type_value不可能唯一。

    因为这是一个公共的类型表,存在这样的数据例子,code,value,name

    USER_TYPE,1,普通用户。

    USER_TYPE,2,VIP用户。

    GAME_TYPE,1,xx1游戏。

    GAME_TYPE,2,xx2游戏。

    因为mysql是数据库中的奇葩
    0 0
相关问答

1

回答

有大佬试过 postgresql 分区吗?

2022-09-16 10:23:50 27浏览量 回答数 1

1

回答

PostgreSQL的这三个过程分别是?

2022-05-08 19:40:34 103浏览量 回答数 1

1

回答

centos 6.2 编译 postgresql 9.3.2 错误?报错

2020-06-22 13:26:44 315浏览量 回答数 1

1

回答

postrgesql?报错

2020-06-09 14:14:17 250浏览量 回答数 1

1

回答

postgreSQL和PHP的配置:配置报错 

2020-06-04 10:23:33 461浏览量 回答数 1

1

回答

postgreSQL和PHP的配置,报错

2020-05-28 09:21:15 449浏览量 回答数 1

0

回答

PostgreSQL中的CrossTab

2019-12-26 21:15:29 1300浏览量 回答数 0

1

回答

Postgresql热备

2017-08-01 17:42:00 6770浏览量 回答数 1

1

回答

PostgreSQL执行创建数据库报错

2017-03-19 21:17:51 2891浏览量 回答数 1

1

回答

php+postgresql

2016-06-03 14:47:38 1572浏览量 回答数 1
+关注
爱吃鱼的程序员
https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
2
文章
21564
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载