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

首先看下面这张表

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;

这里写图片描述

在这张已经建成的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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

图灵的猫.

小二,给客官上酒!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值