前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL的主键详解

MySQL的主键详解

作者头像
JavaEdge
发布2021-02-22 16:13:22
4.9K0
发布2021-02-22 16:13:22
举报
文章被收录于专栏:JavaEdgeJavaEdge

主键(primary key)

一列 (或一组列),其值能够唯一区分表中的每个行。唯一标识表中每行的这个列(或这组列)称为主键。主键用来表示一个特定的行。没有主键,更新或删除表中特定行很困难,因为没有安全方法保证只涉及相关的行而不误伤其他行!

一个顾客表可以使用顾客编号列,而订单表可以使用订单ID,雇员表可以使用雇员ID或雇员社会保险号。

应该总是定义主键 虽然并非总需主键,但大多数数据库设计人员都应保证他们创建的每个表具有一个主键,以便以后的数据操纵和管理。

表中的任何列都可以作为主键,只要它满足以下主键值规则条件:

  1. 任两行不具相同的主键值
  2. 每行都必须具有一个主键值(主键列不允许NULL)

这里的规则是MySQL本身强制实施的。

除MySQL强制实施的规则外,还应该坚持的最佳实践:

  1. 不更新主键列中的值
  2. 不重用主键列的值
  3. 不在主键列中使用可能会更改的值 例如,如果使用一个名字作为主键以标识某个供应商,当该供应商合并和更改其 名字时,必须更改这个主键)

联合主键

  • 好处 可以直观的看到某个重复字段的记录条数

主键A跟主键B组成联合主键 主键A跟主键B的数据可以完全相同,联合就在于主键A跟主键B形成的联合主键是唯一的。 联合主键体现在多个表上,复合主键体现在一个表中的多个字段。

复合主键

主键通常定义在表的一列上,但这并不是必需的,也可使用多个列作为主键。此时上述的条件必须应用到构成主键的所有列,所有列值的组合必须是唯一的(多列中的单个列的值可以不唯一)。

表的主键含有一个以上的字段组成,不使用无业务含义的自增id作为主键 将多个字段设置为主键,形成复合主键,这多个字段联合标识唯一性,其中,某几个主键字段值出现重复是没有问题的,只要不是有多条记录的所有主键值完全一样,就不算重复

超键

在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。

候选键

最小超键,即没有冗余元素的超键。

外键

在一个表中存在的另一个表的主键称此表的外键

主键的选择

  • 代理主键(推荐使用) 与业务无关的,无意义的数字序列。
    • 不与业务耦合,因此更容易维护
    • 通用的键策略能够减少要编写的源码数量,减少系统的总体拥有成本
  • 自然主键 事物属性中的自然唯一标识
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-08-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 主键(primary key)
    • 联合主键
      • 复合主键
        • 超键
          • 候选键
            • 外键
            • 主键的选择
            相关产品与服务
            云数据库 SQL Server
            腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档