MySQl的外键是什么

The_poor_student 2014-06-18 10:12:29
我的疑问是 "使用外键约束" ,然后我对 "外键" 这个词不是很理解,查询相关资料都是讲一些术语,说外键的主要作用是:保持数据的一致性、完整性。听得我是一头雾水。希望大神能帮我解答,打比方啥的,尽量通俗易懂。
关于外键,我有自己的一些理解,但是不晓得对不对,在我心目中的外键约束是这样的:
假如现在需要建立一个表,什么表呢?一个班级学生的个人信息表。
所以在设计的时候,就给表1添加一个外键,这个外键就是表2中的学号字段,那么这样表1就是主表表2就是子表(没有说反吧?)。所以结合2张表就能保持数据的一致性、完整性(估计就是还原成原来的那张大表吧)。
借着这个例子接着谈谈外键的一些规则:
1、表1可以有一个或者多个外键,也可以没有。(如果表1有多个外键可不可以是这样的情况,表2中的多个字段是表1的外键;或者说表1的多个外键是在多个表中)
2、这个外键可以不是表1的主键,但必须是子表的主键。(简单的说就是,如果一个字段是某个表的外键时,那么该字段必须是主键)
以上就是我的个人见解。不知对与错。
...全文
201 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
The_poor_student 2014-06-18
  • 打赏
  • 举报
回复
我问的是2个问题。 第一个是关于设计的那个学生表,那样使用外键是对的吧,我是想通过那个例子理解什么是外键,我那样理解对吗? 第二是关于外键的一些规则,说法对不对?
The_poor_student 2014-06-18
  • 打赏
  • 举报
回复
引用 4 楼 lumengabc 的回复:
简单讲,就是有外键关系的2张表(a,b),只有a表的数据能删除,而b表的数据要删除的话必须在a表中不存在b表的数据。也就是制约,不让你乱删东西!
外键就是将一个表拆开吧,分成多个表吧。 我设计的那张表的思路对不对?
The_poor_student 2014-06-18
  • 打赏
  • 举报
回复
引用 2 楼 ACMAIN_CHM 的回复:
1、表1可以有一个或者多个外键,也可以没有。(如果表1有多个外键可不可以是这样的情况,表2中的多个字段是表1的外键;或者说表1的多个外键是在多个表中) 所谓外键,是针对表2来说的,与表1无关,仅是表1中的字段被表2的外键参照。 表1中的字段可以被多个表参照,表1中的字段也同样可以被表2中的多个字段参照。
那我说的那个大表和拆开那2个表的情况对不对?
3文丰 2014-06-18
  • 打赏
  • 举报
回复
在你这个理解的基础上做程序开发觉着基本可以了,大体上就这么个感觉,但是如果做数据库可能还需要多深入了解一点
lumengabc 2014-06-18
  • 打赏
  • 举报
回复
简单讲,就是有外键关系的2张表(a,b),只有a表的数据能删除,而b表的数据要删除的话必须在a表中不存在b表的数据。也就是制约,不让你乱删东西!
ACMAIN_CHM 2014-06-18
  • 打赏
  • 举报
回复
2、这个外键可以不是表1的主键,但必须是子表的主键。(简单的说就是,如果一个字段是某个表的外键时,那么该字段必须是主键) 表二中的外键,参考表1中的某字段,或某字段组合,则出于效率考虑,在几乎所有数据库中在表1中这个被参照字段组必须创建索引。 在表二,不需要是主键,在表1中同样不需要是主键。
ACMAIN_CHM 2014-06-18
  • 打赏
  • 举报
回复
1、表1可以有一个或者多个外键,也可以没有。(如果表1有多个外键可不可以是这样的情况,表2中的多个字段是表1的外键;或者说表1的多个外键是在多个表中) 所谓外键,是针对表2来说的,与表1无关,仅是表1中的字段被表2的外键参照。 表1中的字段可以被多个表参照,表1中的字段也同样可以被表2中的多个字段参照。
rucypli 2014-06-18
  • 打赏
  • 举报
回复
外键上的数据肯定在别的表事先存在
lumengabc 2014-06-18
  • 打赏
  • 举报
回复
楼上正解,其实外键就是2个表有关联作用,保持数据的一致性。 比如学生表a和班级表b,学生表a里有班级表b的bid,如果班级表b全部被清空了,那a表里bid也就没意义了。 用外键就可以强制约束你班级表b不能随意删除,除非a表里没有该班级
ACMAIN_CHM 2014-06-18
  • 打赏
  • 举报
回复
引用 6 楼 u013962600 的回复:
[quote=引用 2 楼 ACMAIN_CHM 的回复:] 1、表1可以有一个或者多个外键,也可以没有。(如果表1有多个外键可不可以是这样的情况,表2中的多个字段是表1的外键;或者说表1的多个外键是在多个表中) 所谓外键,是针对表2来说的,与表1无关,仅是表1中的字段被表2的外键参照。 表1中的字段可以被多个表参照,表1中的字段也同样可以被表2中的多个字段参照。
那我说的那个大表和拆开那2个表的情况对不对?[/quote]外键和表的垂直拆分,没什么关系。 只是一般在拆分时会利用外键以确保B表中的记录在A表中必须都存在,以形成数据完整性。

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧