最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

mysql外键理解_MySQL

来源:动视网 责编:小采 时间:2020-11-09 19:55:49
文档

mysql外键理解_MySQL

mysql外键理解_MySQL:一个班级的学生个人信息表: 什么是外键 在设计的时候,就给表1添加一个外键,这个外键就是表2中的学号字段,那么这样表1就是主表,表2就是子表。 外键用来干什么 为了一张表记录的数据不要太过冗余。这和软件工程的模块化思想差不多类似,只不过在数据
推荐度:
导读mysql外键理解_MySQL:一个班级的学生个人信息表: 什么是外键 在设计的时候,就给表1添加一个外键,这个外键就是表2中的学号字段,那么这样表1就是主表,表2就是子表。 外键用来干什么 为了一张表记录的数据不要太过冗余。这和软件工程的模块化思想差不多类似,只不过在数据
 一个班级的学生个人信息表:

什么是外键

在设计的时候,就给表1添加一个外键,这个外键就是表2中的学号字段,那么这样表1就是主表,表2就是子表。

外键用来干什么

为了一张表记录的数据不要太过冗余。这和软件工程的模块化思想差不多类似,只不过在数据库中是对表关系进行解耦,尽量让表 记录的数据单一化。就如你贴的图片中,把成绩和学生信息放在一张表中就太冗余了。

为什么说外键能保持数据的一致性、完整性

你想想,你的图中的第一章表分割成了表1和表2,表2的学号引用了表1的学号字段作为外键,如果不建立外键,只是和表1一样单纯性地设立一个学号字段,那么和建立外键有什么区别呢?

比如表1中张三的学号为20140900001,那么我在表2中插数据的时候在学号字段插20140900001来记录张三的成绩不也是做到了表的解耦了吗?

这里存在的问题是,在不设置外键的情况下,表2的学号字段和表1的学号字段是没有关联的。只是你自己认为他们有关系而已,数据库并不认为它俩有关系。也就是说,你在表2的学号字段插了一个值(比如20140999999),但是这个值在表1中并没有,这个时候,数据库还是允许你插入的,它并不会对插入的数据做关系检查。然而在设置外键的情况下,你插入表2学号字段的值必须要求在表1的学号字段能找到。 同时,如果你要删除表1的某个学号字段,必须保证表2中没有引用该字段值的列,否则就没法删除。这就是所谓的保持数据的一致性和完整性。你想,如果表2还引用表1的某个学号,你却把表1中的这个学号删了,表2就不知道这个学号对应的学生是哪个学生。数据的一致性还包括数据类型的一致性(这个见下面就知道了)。

外键的使用规则

从表的字段必须与外键类型相同(如上,分数表 stu 的类型必须和学生表 sid 的类型相同,比如都是 int(10) 类型);外键必须是主表的唯一键(如上,学生表 sid 是主键,而主键是唯一的,所以可以作为分数表 stu 的外键);有关联的字段(如上,分数表之所以使用学生表的 sid 是因为两者有关联,分数表记录的是学生的分数,而学生可以用 sid 来唯 一标识);避免使用复合键(也就是说从表可以同时引用多个主表的字段作为一个外键,一般不推荐这种做法)。

外键不一定需要作为从表的主键,外键也不一定是主表的主键,主表的唯一键就可以作为从表的外键。

文档

mysql外键理解_MySQL

mysql外键理解_MySQL:一个班级的学生个人信息表: 什么是外键 在设计的时候,就给表1添加一个外键,这个外键就是表2中的学号字段,那么这样表1就是主表,表2就是子表。 外键用来干什么 为了一张表记录的数据不要太过冗余。这和软件工程的模块化思想差不多类似,只不过在数据
推荐度:
标签: 理解 mysql 外键
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top