关于MySQL的外键Foreign Key(删除的问题)

MySQL中的外键

什么是外键?

如果公共关键字在一个关系中是关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表
以上是百科解释…
在这里插入图片描述
萌新表示…啊…这…
下面用例子解释👇

学生表:

学号姓名性别家庭住址班级
1001张三xxxxx001
1002张三xxxxx001
1003张三xxxxx002

班级表

班级班名班主任
001高(1)一班张xx
002高(1)二班羊xx

学生表中学号为主键,班级表中班级为主键 。学生必定来自某个班级,所以学生表中的班级编号必须是班级表中的班级编号,此时学生表中的班级编号即称之为学生表的外键

如何添加外键?

外键的添加方式分为三种:①列级 ②行级 ③表级

1.列级

直接在创建表时跟在对应列后面。
但是!👉mysql不支持这种语法

CREATE TABLE Orders
(
Id_O int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
)
2.行级

全部列后面创建

CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
)
3.表级

有人会问 如果我的表已经建立了但是忘了加外键怎么办?这不,表级就来了。
使用alter进行追加

ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)

其中 fk_Per0rders 为键名(自定义)
此方法有个好处就是方便删除外键,将来设计程序的时候不建议使用外键,会提高程序的耦合度

加上了,那…如何删除外键呢?

alter table 表名 drop foreign key 约束名(键名); 就这样简单、粗暴就完了?
看下例👇
在这里插入图片描述
已经提前插入外键,上图可以看出 mul ,然后我们删除👇


why? 是我们没删掉么???

no!
原因在这👉:在创建外键的时候系统会自动添加一个同名索引
也就是说此时其实已经没有外键约束了,但是由于索引还在,所以依然会显示,但是两张表已经独立了。
那么能去掉mul么??? 当然可以,在删掉外键的基础上,删除索引即可。
语句:drop index 索引名 on 表名 这样就彻底干净了

结束语

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值