无法添加外键约束的原因(cannot add foreign key constraint)

我的机器学习教程「美团」算法工程师带你入门机器学习 以及 「三分钟系列」数据结构与算法 已经开始更新了,欢迎大家订阅~这篇专栏整合了这几年的算法知识,简单易懂,也将是我实体书的BLOG版。

欢迎大家扫码关注微信公众号「图灵的猫」,除了有更多AI、算法、Python相关文章分享,还有免费的SSR节点和外网学习资料。其他平台(微信/知乎/B站)也是同名「图灵的猫」,不要迷路哦~

首先看下面这张表

Create table student
(sno int(10) unsigned not null,
sname varchar(20) not null,
sex enum('男','女') default null,
sage smallint unsigned,
sdept varchar(10) not null
Primary key (sno)
);

插入三条记录后:

SELECT * FROM students_id.student;

无法添加外键约束的原因(cannot add foreign key constraint)_第1张图片

在这张已经建成的STUDENT表中,SNO为Primary Key, 类型为
int(10) unsigned not null

然后,创建下面这张表,其中SNO为外键,参照关系是SC,被参照是STUDENT

Create table SC(
cno char(4) not null,
sno smallint,  //外键
grade smallint,
primary key(cno),
foreign key (sno) references students_id.student(Sno)
);

创建失败

这里写图片描述

原因是在SC这张表中,作为参照关系,SNO的数据类型没有保持和被参照的表STUDENT完全一致。

应改为如下形式:

Create table SC(
cno char(4) not null,
sno int(10) unsigned not null, 
grade smallint,
primary key(cno),
foreign key (sno) references students_id.student(Sno)
);

此时创建成功。需要注意的是,在SQL中,参照关系可以为主键,但在MYSQL中,参照关系不能为主键。
总结:
1.外键不能为新建表的主键;
2.外键所参照的键必须为被参照表的主键;
3.参照表的值需要在所参考的表的那一个主键中已经存在的(即不能为空)
更多相关代码可以访问
我的GITHUB

你可能感兴趣的:(NoSql数据库,Mysql数据库,***Data,Science***)