mysql外键

如果一张表中有一个非主键的字段指向了另一张表中的主键,就将该字段叫做外键。一张表中外键可以有多个,也就是不同字段指向了不同表中的主键。需要注意数据表的存储引擎必须为InnoDB,因为InnoDB提供事务支持以及外部键等高级数据库功能,相反的MyISAM不支持。

外键的作用是保持数据一致性、完整性,主要体现在下面两个方面:

阻止执行

从表插入新行,其外键值不是主表的主键值便阻止插入;
从表修改外键值,新值不是主表的主键值便阻止修改;
主表删除行,其主键值在从表里存在便阻止删除(要想删除,必须先删除从表的相关行);
主表修改主键值,旧值在从表里存在便阻止修改(要想修改,必须先删除从表的相关行)。

级联执行

主表删除行,连带从表的相关行一起删除;
主表修改主键值,连带从表相关行的外键值一起修改。

下面我们就来看看具体的事例:

 

# 创建数据库
CREATE DATABASE Test;
USE TEMP;

# 创建表
CREATE TABLE student(id int (11) primary key auto_increment,name char(255),sex char(255),age int(11))charset utf8;
CREATE TABLE student_score(id int (11) primary key auto_increment,class char(255),score char(255),student_id int(11))charset utf8;
Alter table student_score add constraint s_id foreign key(student_id) references student(id);

# 插入学生信息
INSERT INTO student(name,sex,age) VALUES('学生1','男','12');

# 插入学科及分数信息
INSERT INTO student_score(class,score,student_id) VALUES('语文','100',1);
INSERT INTO student_score(class,score,student_id) VALUES('数学','100',1);
INSERT INTO student_score(class,score,student_id) VALUES('英语','100',1);

通过命令行查看表结构:

 

image.png

 

添加后的内容在数据库中展示为:

 

image.png


接下来我们验证下外键的作用:

1. 从表插入新行,其外键值不是主表的主键值便阻止插入

image.png

2. 从表修改外键值,新值不是主表的主键值便阻止修改

image.png

3. 主表删除行,其主键值在从表里存在便阻止删除(要想删除,必须先删除从表的相关行)

image.png

4. 主表修改主键值,旧值在从表里存在便阻止修改(要想修改,必须先删除从表的相关行)

image.png

5. 主表修改主键值,连带从表相关行的外键值一起修改

做这个之前,首先需要改下外键的约束条件

 

#删除外键
alter table student_score drop foreign key s_id;
#加入CASCADE约束外键
Alter table student_score add constraint s_id foreign key(student_id) references student(id) ON DELETE CASCADE ON UPDATE CASCADE;

通过命令行查看表结构:

 

image.png

 

接下来做update操作:

 

image.png

6. 主表删除行,连带从表的相关行一起删除

image.png



作者:唐T唐X
链接:https://www.jianshu.com/p/010106e61cc6
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值