Mysql表创建外键报错解决方案
程序员文章站
2022-03-14 18:29:14
数据库表a:create table task_desc_tab( id int(11) primary key not null comment '自增主键' auto_increment, &...
数据库表a:
create table task_desc_tab ( id int(11) primary key not null comment '自增主键' auto_increment, <strong>taskname</strong> varchar(200) not null comment '任务名字', sqlname varchar(20) not null comment 'sql文件名字', params varchar(5000) not null comment '任务参数,格式为一个json字符串', updatetime timestamp default current_timestamp comment '更新时间', detail varchar(3000) comment '任务一些描述信息,只是备注信息作用' ) engine = innodb default charset = utf8;
数据库b:
create table exec_plan_tab ( id int(11) primary key not null auto_increment, <strong>taskname</strong> varchar(200) not null, startdate date not null, enddate date not null, updatetime timestamp default current_timestamp, constraint exec_plan_tab_task_desc_tab_taskname_fk foreign key (taskname) references task_desc_tab (taskname) ) engine = innodb default charset = utf8;
目标:创建表使得表b中的taskname为外键,参考表a中的taskname字段,创建表发现报错如下:
[2018-07-19 15:02:29] [hy000][150] create table 'daxin/#sql-5d_30' with foreign key constraint failed. there is no index in the referenced table where the referenced columns appear as the first columns.
[2018-07-19 15:02:29] [hy000][1215] cannot add foreign key constraint
[2018-07-19 15:02:29] [hy000][1215] cannot add foreign key constraint
经过排查找到问题原因: 表a中的taskname必须使用unique字段修饰,这样保证记录唯一性,当表b参考时候不会出现歧义。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
下一篇: Oracle数据库创建存储过程的示例详解