Mysql表创建外键报错解决方案
数据库表A:
CREATETABLEtask_desc_tab ( idINT(11)PRIMARYKEYNOTNULLCOMMENT'自增主键'AUTO_INCREMENT, tasknameVARCHAR(200)NOTNULLCOMMENT'任务名字', sqlnameVARCHAR(20)NOTNULLCOMMENT'sql文件名字', paramsVARCHAR(5000)NOTNULLCOMMENT'任务参数,格式为一个JSON字符串', updatetimeTIMESTAMPDEFAULTCURRENT_TIMESTAMPCOMMENT'更新时间', detailVARCHAR(3000)COMMENT'任务一些描述信息,只是备注信息作用' ) ENGINE=InnoDB DEFAULTCHARSET=utf8;
数据库B:
CREATETABLEexec_plan_tab ( idINT(11)PRIMARYKEYNOTNULLAUTO_INCREMENT, tasknameVARCHAR(200)NOTNULL, startdateDATENOTNULL, enddateDATENOTNULL, updatetimeTIMESTAMPDEFAULTCURRENT_TIMESTAMP, CONSTRAINTexec_plan_tab_task_desc_tab_taskname_fkFOREIGNKEY(taskname)REFERENCEStask_desc_tab(taskname) ) ENGINE=InnoDB DEFAULTCHARSET=utf8;
目标:创建表使得表B中的taskname为外键,参考表A中的taskname字段,创建表发现报错如下:
[2018-07-1915:02:29][HY000][150]Createtable'daxin/#sql-5d_30'withforeignkeyconstraintfailed.Thereisnoindexinthereferencedtablewherethereferencedcolumnsappearasthefirstcolumns.
[2018-07-1915:02:29][HY000][1215]Cannotaddforeignkeyconstraint
[2018-07-1915:02:29][HY000][1215]Cannotaddforeignkeyconstraint
经过排查找到问题原因:表A中的taskname必须使用UNIQUE字段修饰,这样保证记录唯一性,当表B参考时候不会出现歧义。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。