云数据库RDS MySQL版创建外键约束时提示“Cannot add foreign key constraint”错误

更新时间:
复制 MD 格式

问题描述

云数据库RDS MySQL版是支持外键约束的,但在创建外键约束时提示如下错误。

Cannot add foreign key constraint

问题原因

要关联的字段在要关联的表中不是主键。

解决方案

此处以tstudent表和tscore表为例说明如何解决此问题。

  1. 执行如下SQL语句,查看tstudent表结构,判断要关联的字段在要关联的表中是不是主键。

show create table tstudent;

系统显示类似如下,确认tstudent表没有主键。

mysql>show create table tstudent;
+----------+----------------------------------------------------------------------------------------------------------------------+
| Table    | Create Table                                                                                                         |
+----------+----------------------------------------------------------------------------------------------------------------------+
| tstudent | CREATE TABLE `tstudent` (`sno` varchar(4) NOT NULL DEFAULT '', `sname` varchar(3) DEFAULT NULL) ENGINE=InnoBD DEFAULT CHARSET=utf8 |
+----------+----------------------------------------------------------------------------------------------------------------------+
  1. 执行如下SQL语句,确认tscore表结构正常。

show create table tscore;

系统显示类似如下。

mysql>show create table tscore;
+--------+-------------------------------------------------------------------------------------------------------------------------------+
| Table  | Create Table                                                                                                                  |
+--------+-------------------------------------------------------------------------------------------------------------------------------+
| tscore | CREATE TABLE `tscore` (`sno` char(4) DEFAULT NULL, `cno` char(3) DEFAULT NULL,`score` int(10) DEFAUL '0') ENGINE=InnoBD DEFAULT CHARSET=utf8 |
+--------+-------------------------------------------------------------------------------------------------------------------------------+
  1. 执行如下SQL语句,为tstudent表添加主键。

alter table tstudent add primary key(sno);
  1. 执行如下SQL语句,创建外键约束即可成功。

alter table tscore add constraint fk_tscore_sno foreign key(sno) references tstudent(sno);

适用于

云数据库RDS MySQL