MySQL中关于超键和主键及候选键的区别

 更新时间:2022年07月31日 14:53:26   作者:胖了个头  
这篇文章主要介绍了MySQL中关于超键和主键及候选键的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

关于超键和主键及候选键的区别

最近在看MySQL的书时遇到了一个问题:

既然已经有了主键这个概念,主键已经能够满足需求了,那为什么还要有候选键这种东西?候选键的作用是什么呢?给了它一个候选键的定义但是它真的并没有什么乱用。

抱着刨根问底拦不住的心态我去网上搜了搜,看了看大神们的解释,看得我还是有些懵懂,于是想在这里梳理一下,帮助自己理解的更通透,也希望如果有理解错的地方能有人指点一下 下面就是我的一些理解:

其实主键和超键还好一些,比如有这么一个表:

在这里插入图片描述

表写的有些糙,凑合看吧。

超键

在关系中能唯一标识元组的属性集称为关系模式的超键。 注定义中的“属性集”,超键可以是一个很大的集合,只要他能确定是哪一行就行,因此’id’,‘user’,‘pwd’,‘section’,'name’都可以是超键的集。

候选键

不含有多余属性的超键,比如在上面的超键中,'id’自己就可以独自确定是哪一行,所以他自己可以是一个候选键,除去它以外的另外四个也可以是候选键,但是这五个放在一起因为有了多余的列,他们就不是候选键。(另外四个可以是候选键的原因是每一列都有可能有重复的内容)

主键

在所有的候选键里面找一个作为主键供使用,也就是说可以是id,也可以是另外四个的合体,也有可能是其他的选择,只要能保证选择的集合能唯一确定即可。

总结来说,候选键是超键的子集,主键是候选键的子集。

其实整理了这么多以后我还是不明白候选键的作用到底是什么,其实他可能就是作为一个候车厅一样,车上只剩下一个座位,有几个主键在候车厅里坐着,告诉你:“我们几个人都买票了,都有资格上车,你选谁上,我们谁就跟你去上车”,应该就是这样。

理解超键、候选键、主键概念及关系

基本概念

  • 超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键/码。
  • 候选键(candidate key):不含有多余属性的超键称为候选键,即其真子集不再是超键。
  • 主键(primary key):用户选作元组标识的一个候选键称为主键,是候选键之一。

关系

候选键是超键的子集,主键是候选键中的一个。

举个栗子

考虑属性集(身份证号,姓名 ,性别 ,年龄),假设无重名

a.其中超键有:

  • 身份证号、姓名、(姓名,性别)、(姓名,性别,年龄)等
  • --这里可以看出,超键是能唯一确定一个人的属性组

b.超键中的候选键

  • 身份证号、姓名唯一,而且没有多余属性,所以是一个候选键
  • --这里可以看出,候选键是没有多余属性的超键

c.选择主键

  • 用户可根据自己喜好考虑选择姓名或者身份证号作为主键
  • --主键是选中的一个候选键

还不明白?

实例:

在SQL Server数据库中,有一个学生信息表如下所示,在该表中不能作为候选键的属性集合为( ) (选择一项)

学号 姓名 性别 年龄 系别 专业
20020612 李辉 男 20 计算机 软件开发
20060613 张明 男 18 计算机 软件开发
20060614 王小玉 女 19 物理 力学
20060615 李淑华 女 17 生物 动物学
20060616 赵静 男 21 化学 食品化学
20060617 赵静 女 20 生物 植物学

a){学号}
b){学号、姓名}
c){年龄、系别}
d){姓名、性别}
e){姓名、专业}

如果大家还不知道如何来选择,再看看基本概念吧!

嗯,不会的就选C吧,哈哈哈哈哈哈

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 配置mysql允许远程连接的方法

    配置mysql允许远程连接的方法

    默认情况下,MySQL只允许本地登录,如果要开启远程连接,则需要修改/etc/my.cnf文件
    2013-02-02
  • mysql中Table is read only的解决方法小结

    mysql中Table is read only的解决方法小结

    本文章总结了关于在linux与windows中 mysql出现Table is read only解决办法总结,有需要的朋友可参考一下
    2013-01-01
  • MySQL中触发器和游标的介绍与使用

    MySQL中触发器和游标的介绍与使用

    这篇文章主要给大家介绍了关于MySQL中触发器和游标的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • mysql子查询(单行子查询,多行子查询,多列子查询)

    mysql子查询(单行子查询,多行子查询,多列子查询)

    本文主要介绍了mysql子查询(单行子查询,多行子查询,多列子查询),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • MySQL数据库的事务和索引详解

    MySQL数据库的事务和索引详解

    这篇文章主要介绍了MySql 索引和事务,总结分析了mysql数据库中关于索引和事务的概念、原理、知识点及相关注意事项,需要的朋友可以参考下
    2021-10-10
  • mysql巡检脚本(必看篇)

    mysql巡检脚本(必看篇)

    下面小编就为大家带来一篇mysql巡检脚本(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Oracle更换为MySQL遇到的问题及解决

    Oracle更换为MySQL遇到的问题及解决

    前段时间自行安装MySQL8.0数据库,为数据库去Oracle做准备。现在公司正规划搭建MySQL集群。于是挑选两个应用,进行改造测试,积累下经验。
    2021-05-05
  • MySQL详细汇总常用函数

    MySQL详细汇总常用函数

    MySQL数据库中提供了很丰富的函数。MySQL函数包括数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数、加密函数、格式化函数等。通过这些函数,可以简化用户的操作。本期将带你总结常用函数都有哪些
    2021-11-11
  • MySQL通过自定义函数实现递归查询父级ID或者子级ID

    MySQL通过自定义函数实现递归查询父级ID或者子级ID

    这篇文章主要介绍了MySQL通过自定义函数实现递归查询父级ID或者子级ID,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • 一文详解MySQL Binlog日志与主从复制

    一文详解MySQL Binlog日志与主从复制

    这篇文章主要介绍了一文详解MySQL Binlog日志与主从复制,Binlog是Binary log的缩写,即二进制日志,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-07-07

最新评论