MySQL中的外键
什么是外键?
如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。
以上是百科解释…
萌新表示…啊…这…
下面用例子解释👇
学生表:
学号 | 姓名 | 性别 | 家庭住址 | 班级 |
---|---|---|---|---|
1001 | 张三 | 男 | xxxxx | 001 |
1002 | 张三 | 男 | xxxxx | 001 |
1003 | 张三 | 男 | xxxxx | 002 |
班级表
班级 | 班名 | 班主任 |
---|---|---|
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 表名 这样就彻底干净了