一、复合主键

所谓的复合主键 就是指你表的主键含有一个以上的字段组成,不使用无业务含义的自增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联合主键语句6_初探SQL语句复合主键与联合主键相关推荐

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

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

  2. oracle创建主键sql语句,Oracle创建主键自增表(sql语句实现)及触发器应用

    Oracle创建主键自增表(sql语句实现)及触发器应用 1.创建表 复制代码 代码如下: createtableTest_Increase( useridnumber(10)NOTNULLprima ...

  3. Mysql 语句操作索引SQL语句

    最近项目中需要新增唯一索引,特此记录便于日后查阅. 一.使用ALTER TABLE语句创建索引 语法如下: 1.PRIMARY KEY(主键索引)mysql>ALTER TABLE `table ...

  4. MySQL中特别实用的几种SQL语句

    MySQL中特别实用的几种SQL语句 文章目录 MySQL中特别实用的几种SQL语句 1. 插入或替换 2. 插入或更新 3. 插入或忽略 4. 指定数据快照或备份 5. 写入查询结果集 6. 强制使 ...

  5. Mysql学习笔记(基础)基础sql语句详细记录

    数据库学习(基础) // 个人网课学习记录,如果有违规等问题,请联系我删除~ mysql下载安装( 解压版安装配置 下载版安装配置 ) 需求分析:使用cmd命令来创建一个数据库,并对数据库中得一张分类 ...

  6. MySQL入门学习的第一节(SQL语句)

    MySQL入门学习的第一节(SQL语句) SQL语句

  7. 【MySQL】全国省市县三级联动SQL语句—区县SQL(三)

    目录 ->区县信息表数据 [MySQL]全国省市县三级联动SQL语句-建表和省份SQL(一)_路遥叶子的博客-CSDN博客全国省市县三级联动SQL语句-建表和省份SQL(一)https://bl ...

  8. 【MySQL】全国省市县三级联动SQL语句—城市SQL(二)

    目录 -- >城市信息表数据 [MySQL]全国省市县三级联动SQL语句-建表和省份SQL(一)全国省市县三级联动SQL语句-建表和省份SQL(一)https://blog.csdn.net/z ...

  9. JavaWEB01:MySQL基础——数据库相关概念、MySQL安装和配置、基础的SQL语句

    JavaWEB01:MySQL基础--数据库相关概念.MySQL安装和配置.基本的SQL语句 JavaWEB02:MySQL高级--约束.数据库设计.多表查询.事务 JavaWEB03:JDBC Ja ...

最新文章

  1. 北京搜狗已签算法30W,西安银行总包20W,要不要毁约去银行?
  2. ClassLoader引发的类型转换异常(转载)
  3. 获取屏幕的宽和高-Display中getHeight()和getWidth() 官方废弃
  4. 图形处理:betweeness中心性– neo4j的密码与graphstream
  5. 解决链接错误:error LNK2001: 无法解析的外部符号 __iob
  6. (笔记)Mysql命令drop database:删除数据库
  7. 不断的感悟、不断的学习、不断的成长
  8. python --version没输出_如何在Linux上安装Python
  9. 分享PMP真题回忆,出征软考高级项目管理师
  10. 物联网智能电影院- Android
  11. html遮罩层动画制作,《Flash遮罩层动画的制作》的教学反思
  12. Tableau教程——一
  13. 聪哥哥教你学Python之如何爬取美女图片
  14. 在OpenWrt系统的路由器NETGEAR WNDR4300上安装KMS服务器vlmcsd
  15. 房屋租赁合同模板2020 免费下载
  16. Unity 本地化比较实用的实现方案
  17. 五线谱软件测试初学者,学习五线谱(初学者专用).pdf
  18. 20万+网易音乐人图鉴: 95后超70%、女歌手突破5万
  19. mantis 重启mysql_Mantis -- linux
  20. Android 10 和Android 11 适配采坑 实践篇

热门文章

  1. Excel -- 批量删除字符大于某值的单元格
  2. K8S篇-安装nfs插件
  3. 人体检测用于空洞和裂痕检测
  4. Python Threading Semaphore信号量(子线程的数量)
  5. 搭建和部署nuxt项目
  6. php验证姓名百家姓,我想在表单验证中加入中文姓名合法性模糊匹配判断?
  7. 【软件设计师05】 系统安全分析与设计
  8. 论文学习笔记 CatBoost: unbiased boosting with categorical features
  9. git 各种删除命令
  10. 高赛德尔迭代法matlab程序,高斯赛德尔迭代法matlab编程