一、复合主键

所谓的复合主键 就是指你表的主键含有一个以上的字段组成,不使用无业务含义的自增id作为主键。

比如

create table test

(

name varchar(19),

id number,

value varchar(10),

primary key (name,id)

)

上面的name和id字段组合起来就是你test表的复合主键 ,它的出现是因为你的name字段可能会出现重名,所以要加上ID字段这样就可以保证你记录的唯一性 ,一般情况下,主键的字段长度和字段数目要越少越好 。

这里就会有一个疑惑?  主键是唯一的索引,那么为何一个表可以创建多个主键呢?

其实“主键是唯一的索引”这话有点歧义的。举个例子,我们在表中创建了一个ID字段,自动增长,并设为主键,这个是没有问题的,因为“主键是唯一的索引”,ID自动增长保证了唯一性,所以可以。

此时,我们再创建一个字段name,类型为varchar,也设置为主键,你会发现,在表的多行中你是可以填写相同的name值的,这岂不是有违“主键是唯一的索引”这句话么?

所以我才说“主键是唯一的索引”是有歧义的。应该是“当表中只有一个主键时,它是唯一的索引;当表中有多个主键时,称为复合主键,复合主键联合保证唯一索引”。

为什么自增长ID已经可以作为唯一标识的主键,为啥还需要复合主键呢。因为,并不是所有的表都要有ID这个字段,比如,我们建一个学生表,没有唯一能标识学生的ID,怎么办呢,学生的名字、年龄、班级都可能重复,无法使用单个字段来唯一标识,这时,我们可以将多个字段设置为主键,形成复合主键,这多个字段联合标识唯一性,其中,某几个主键字段值出现重复是没有问题的,只要不是有多条记录的所有主键值完全一样,就不算重复。

二、联合主键

联合主键顾名思义就是多个主键联合形成一个主键组合(主键原则上是唯一的,别被唯一值所困扰。)

联合主键的意义:用2个字段(或者多个字段,后面具体都是用2个字段组合)来确定一条记录,说明,这2个字段都不是唯一的,2个字段可以分别重复,这么设置的好处,可以很直观的看到某个重复字段的记录条数。

一个简单的例子

主键A跟主键B组成联合主键

主键A跟主键B的数据可以完全相同,联合就在于主键A跟主键B形成的联合主键是唯一的。

下例主键A数据是1,主键B数据也是1,联合主键其实是11,这个11是唯一值,绝对不充许再出现11这个唯一值。(这就是多对多关系)

主键A数据 主键B数据

1      1

2      2

3      3

主键A与主键B的联合主键值最多也就是

11

12

13

21

22

23

31

32

33

总结:以我来看复合主键就是含有一个以上的字段组成,如ID+name,ID+phone等,而联合主键要同时是两个表的主题组合起来的。这是和复合主键最大的区别!

以上就是本文关于初探SQL语句复合主键与联合主键的全部内容,希望对大家有所帮助。感兴趣的朋友可以参阅:几个比较重要的MySQL变量、MySQL prepare原理详解、MySQL删除有外键约束的表数据方法介绍等,有什么问题可以随时留言,大家一起讨论,共同进步。

mysql联合主键_初探SQL语句复合主键与联合主键相关推荐

  1. mysql联合主键语句6_初探SQL语句复合主键与联合主键

    一.复合主键 所谓的复合主键 就是指你表的主键含有一个以上的字段组成,不使用无业务含义的自增id作为主键. 比如 create table test ( name varchar(19), id nu ...

  2. MySQL数据库常用命令_常用SQL语句及命令_MySQL常用语句

    文章目录 一.常用的 SQL 语句 (一)查看当前登录用户 (二)查看当前数据库 (三)如何查看全部用户? (四)创建数据库 (五)选择要操作的数据库 (六)创建表 (七)查看表的结构 (八)往表中插 ...

  3. mysql智能提示插件_书写SQL语句的智能提示工具(SQL_Prompt_4 插件)

    书写sql语句也这么久(嘿嘿大概2年了吧),从最初的学习到现在,都期盼能向VS那样有智能的提示,我敲一个单词,他就提示!那该多好啊!又可以减少错误,也提高了开发效率.哎-没办法,身边的人也都这样敲,看 ...

  4. mysql mdf数据库恢复_用SQL语句的方法还原数据库

    restore filelistonly from disk='D:\website\db_backup\bmfn.bak' restore database BMFN from disk='D:\w ...

  5. mysql 名次语法规则_基于sql语句的一些常用语法积累总结

    1.当某一字段的值希望通过其它字值显示出来时(记录转换),可通过下面的语句实现:case Type when '1' then '普通通道' when '2' then '高端通道' end as T ...

  6. MySQL查询本年的数据的sql语句

    MySQL查询本年的数据的sql语句: SELECT * FROM 表名 WHERE YEAR(时间字段)=YEAR(NOW());

  7. 解析MySQL基础架构及一条SQL语句的执行流程和流转

    前言 本篇文章分析SQL语句在MySQL中的执行流程,包括SQL的查询在MySQL内部会怎么流转,SQL语句的更新是怎么完成的.在分析之前我们一起看看MySQL的基础架构,知道了 MySQL由那些组件 ...

  8. Mysql中文乱码以及导出为sql语句和Excel问题解决

    Mysql中文乱码以及导出为sql语句和Excel问题解决 参考文章: (1)Mysql中文乱码以及导出为sql语句和Excel问题解决 (2)https://www.cnblogs.com/zhao ...

  9. sql语句创建表的同时添加外键约束

    sql语句创建表的同时添加外键约束 题目 建立一个商店的数据库store,记录顾客及其购物情况,由下面三个表组成: 商品(商品号,商品名,单价,商品类别,供应商): 顾客(顾客号,姓名,住址): 订单 ...

最新文章

  1. HTML与CSS布局技巧总结
  2. C++——random库中的uniform_int_distribution
  3. 打开VS项目时出错 MSBuild。。。
  4. pandas数据处理实践五(透视表pivot_table、分组和透视表实战Grouper和pivot_table)
  5. Reporting Services 空白页面
  6. C# .net 多线程中集合数据同步
  7. 手把手教你做做一份高质量投标书
  8. 在计算机系统中 cpu指什么地方,在计算机中cpu指的是什么
  9. JQ与JS实现全选按钮案例
  10. ERP收付款的操作与设计--开源软件诞生22
  11. 锁定计算机不让u盘导出,怎样防止别人用U盘拷贝我的文件 禁止u盘拷贝文件设置方法图文详细教程...
  12. 什么是Scrum团队?
  13. 根据入职时间计算工龄
  14. 洁净室环境在线式监测实时读取颗粒尘埃粒子计数器
  15. 关于蓝光影碟,有一些常识,你不一定知道
  16. 智能网联汽车 自动驾驶地图数据质量规范
  17. android资源的诡异问题
  18. 手机数控模拟器安卓版_数控机床模拟器手机版下载-数控机床模拟器(CNC Simulator)安卓版v1.1.4 - 比克尔下载...
  19. pdf论文中python画的图Type 3 fonts字体不兼容
  20. 看一遍就懂,详解java多线程——volatile

热门文章

  1. Linux笔记2_Linux图形界面简介
  2. 你以为的人工智能是人工智能吗?-一起乐学AI
  3. 穿越时空的老故事、看见经典的味道
  4. svd文章分类 c语言,推荐系统相关算法:SVD
  5. linux终端vi怎么复制粘贴,如何在VI编辑器中复制粘贴内容?
  6. jet-cp4005 linux双面打印,小身材大作为 惠普 CP4005办公好助手
  7. python助教工作内容_2020年OO助教工作总结
  8. Qt recompile with -fPIC
  9. 我喜欢的几位中国歌手--黄家驹,许巍,刘欢,腾格尔
  10. javaSE基础知识篇系列(1-50)——数组