博客
关于我
Mysql表创建外键报错
阅读量:789 次
发布时间:2023-02-13

本文共 1282 字,大约阅读时间需要 4 分钟。

数据库表A的创建语句如下:

CREATE TABLE task_desc_tab (    id INT(11) PRIMARY KEY NOT NULL COMMENT '自增主键' AUTO_INCREMENT,    taskname 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,    taskname 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;

创建表时发现以下错误信息:

[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字段上。为了确保表B中的外键约束能够正常工作,表A的taskname字段必须使用UNIQUE修饰。这样可以保证每个taskname值的唯一性,避免在表B引入外键时出现歧义。

转载地址:http://oodfk.baihongyu.com/

你可能感兴趣的文章
mysql数据库基础教程
查看>>
MySQL数据库备份
查看>>
mysql数据库备份与恢复
查看>>
MySQL数据库备份实战
查看>>
Mysql数据库备份的问题:mysqldump: Got error: 1049: Unknown_无需整理
查看>>
mysql数据库如何重置密码是多少钱_MySQL数据库忘记root密码如何重置修改
查看>>
MySQL数据库安装配置与常用命令
查看>>
MySQL数据库实现主从同步数据
查看>>
mysql数据库导入导出_windows系统以及linux系统下的操作---linux工作笔记042
查看>>
mysql数据库导出导入
查看>>
MySQL数据库工具类之——DataTable批量加入MySQL数据库(Net版)
查看>>
mysql数据库常用命令
查看>>
MySQL数据库必会的增删查改操作(CRUD)
查看>>
MySQL数据库性能分析与调优实践
查看>>
mysql数据库扫盲,你真的知道什么是数据库嘛
查看>>
mysql数据库批量插入数据shell脚本实现
查看>>
MySQL数据库操作
查看>>
MySQL数据库故障排错
查看>>
MySQL数据库无法远程连接的解决办法
查看>>
mysql数据库时间类型datetime、bigint、timestamp的查询效率比较
查看>>