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. 分析问题
- 查看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)
- 查看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】的数据类型一致。
- 执行如下修改
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
- 修改
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