欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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参考时候不会出现歧义。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。