解决 Cannot add foreign key constraint 无法添加外键约束的问题

导读:本篇文章讲解 解决 Cannot add foreign key constraint 无法添加外键约束的问题,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

Cannot add foreign key constraint即’无法添加外键约束,但为什么无法创建外键约束,可以往下看。

1. 复现问题

今天使用navicat创建custom_project表的外键时,报出如下错误:

在这里插入图片描述

如果navicat无法创建custom_project表的外键,使用原生SQL能否创建呢,如下所示:

ALTER TABLE 
	`jqp`.`custom_project` 
ADD CONSTRAINT 
	`fk_customProject_dic` 
FOREIGN KEY 
	( `status` ) 
REFERENCES 
	`jqp`.`dic` ( `id` );

执行结果如下,使用原生SQL也会报错。

在这里插入图片描述

2. 分析问题

  1. 查看dic【外键表】主键【id】的数据类型,如下sql
mysql> select COLUMN_NAME 字段名, COLUMN_TYPE 字段类型,COLUMN_key 是否主键 from  information_schema.COLUMNS where table_name = 'dic';
+----------+-------------+----------+
| 字段名   | 字段类型    | 是否主键 |
+----------+-------------+----------+
| id       | bigint(20)  | PRI      |
| dic_code | varchar(64) |          |
| dic_name | varchar(64) |          |
+----------+-------------+----------+
3 rows in set (0.00 sec)

dic的主键【id】的数据类型是bigint(20)

  1. 查看custom_project 主键的status数据类型,如下sql
mysql> select COLUMN_NAME 字段名, COLUMN_TYPE 字段类型,COLUMN_key 是否主键 from  information_schema.COLUMNS where table_name = 'custom_project';
+------------------------+--------------+----------+
| 字段名                 | 字段类型     | 是否主键 |
+------------------------+--------------+----------+
| id                     | bigint(20)   | PRI      |
| name                   | varchar(256) | MUL      |
| status                 | int(11)      | MUL      |
| location               | varchar(256) |          |
| project_manager_name   | varchar(64)  |          |
| project_manager_mobile | varchar(20)  |          |
+------------------------+--------------+----------+
6 rows in set (0.00 sec)

custom_project的字段【status】的数据类型是int(11)

由上可见,dic的主键【id】的数据类型和custom_project的字段【status】的数据类型不一致。

3. 解决问题

既然是数据类型不一致,那么就修改custom_project的字段【status】数据类型,使其和dic的主键【id】的数据类型一致。

  1. 执行如下修改custom_project的字段【status】数据类型的Sql
mysql> ALTER TABLE `jqp`.`custom_project` MODIFY COLUMN `status` BIGINT ( 20 ) NOT NULL COMMENT '项目状态' AFTER `name`;
Query OK, 2 rows affected (0.19 sec)
Records: 2  Duplicates: 0  Warnings: 0
  1. 修改custom_project的字段【status】数据类型,再次执行创建外间关联的SQL,如下所示:
mysql> ALTER TABLE `jqp`.`custom_project` ADD CONSTRAINT `fk_customProject_dic` FOREIGN KEY ( `status` ) REFERENCES `jqp`.`dic` ( `id` );
Query OK, 2 rows affected (0.18 sec)
Records: 2  Duplicates: 0  Warnings: 0

如此便可以成功创建外键了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/99165.html

(0)
小半的头像小半

相关推荐

极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!