中文资料太少。
抛出错误描述: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。
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标记为唯一
外键应该在另一个表中是唯一的,你是不是没有把type_value标记为唯一
type_value不可能唯一。
因为这是一个公共的类型表,存在这样的数据例子,code,value,name
USER_TYPE,1,普通用户。
USER_TYPE,2,VIP用户。
GAME_TYPE,1,xx1游戏。
GAME_TYPE,2,xx2游戏。
外键应该在另一个表中是唯一的,你是不是没有把type_value标记为唯一
type_value不可能唯一。
因为这是一个公共的类型表,存在这样的数据例子,code,value,name
USER_TYPE,1,普通用户。
USER_TYPE,2,VIP用户。
GAME_TYPE,1,xx1游戏。
GAME_TYPE,2,xx2游戏。
外键应该在另一个表中是唯一的,你是不是没有把type_value标记为唯一
type_value不可能唯一。
因为这是一个公共的类型表,存在这样的数据例子,code,value,name
USER_TYPE,1,普通用户。
USER_TYPE,2,VIP用户。
GAME_TYPE,1,xx1游戏。
GAME_TYPE,2,xx2游戏。
因为mysql是数据库中的奇葩版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。