问题描述

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

Cannot add foreign key constraint

 

问题原因

阿里云提醒您:

  • 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
  • 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
  • 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。

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

 

解决方案

阿里云提醒您:

  • 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
  • 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
  • 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。

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

  1. 执行如下SQL语句,查看tstudent表结构,判断要关联的字段在要关联的表中是不是主键。
    show create table tstudent;
    系统显示类似如下,确认tstudent表没有主键。
  2. 执行如下SQL语句,确认tscore表结构正常。
    show create table tscore;
    系统显示类似如下。
  3. 执行如下SQL语句,为tstudent表添加主键。
    alter table tstudent add primary key(sno);
  4. 执行如下SQL语句,创建外键约束即可成功。
    alter table tscore add constraint fk_tscore_sno foreign key(sno) references tstudent(sno);

     

    适用于

    • 云数据库RDS MySQL版

     

    如果您的问题仍未解决,您可以在阿里云社区提交工单联系阿里云技术支持。