mysql联合主键语句6_初探SQL语句复合主键与联合主键
一、复合主键
所谓的复合主键 就是指你表的主键含有一个以上的字段组成,不使用无业务含义的自增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语句复合主键与联合主键相关推荐
- mysql联合主键_初探SQL语句复合主键与联合主键
一.复合主键 所谓的复合主键 就是指你表的主键含有一个以上的字段组成,不使用无业务含义的自增id作为主键. 比如 create table test ( name varchar(19), id nu ...
- oracle创建主键sql语句,Oracle创建主键自增表(sql语句实现)及触发器应用
Oracle创建主键自增表(sql语句实现)及触发器应用 1.创建表 复制代码 代码如下: createtableTest_Increase( useridnumber(10)NOTNULLprima ...
- Mysql 语句操作索引SQL语句
最近项目中需要新增唯一索引,特此记录便于日后查阅. 一.使用ALTER TABLE语句创建索引 语法如下: 1.PRIMARY KEY(主键索引)mysql>ALTER TABLE `table ...
- MySQL中特别实用的几种SQL语句
MySQL中特别实用的几种SQL语句 文章目录 MySQL中特别实用的几种SQL语句 1. 插入或替换 2. 插入或更新 3. 插入或忽略 4. 指定数据快照或备份 5. 写入查询结果集 6. 强制使 ...
- Mysql学习笔记(基础)基础sql语句详细记录
数据库学习(基础) // 个人网课学习记录,如果有违规等问题,请联系我删除~ mysql下载安装( 解压版安装配置 下载版安装配置 ) 需求分析:使用cmd命令来创建一个数据库,并对数据库中得一张分类 ...
- MySQL入门学习的第一节(SQL语句)
MySQL入门学习的第一节(SQL语句) SQL语句
- 【MySQL】全国省市县三级联动SQL语句—区县SQL(三)
目录 ->区县信息表数据 [MySQL]全国省市县三级联动SQL语句-建表和省份SQL(一)_路遥叶子的博客-CSDN博客全国省市县三级联动SQL语句-建表和省份SQL(一)https://bl ...
- 【MySQL】全国省市县三级联动SQL语句—城市SQL(二)
目录 -- >城市信息表数据 [MySQL]全国省市县三级联动SQL语句-建表和省份SQL(一)全国省市县三级联动SQL语句-建表和省份SQL(一)https://blog.csdn.net/z ...
- JavaWEB01:MySQL基础——数据库相关概念、MySQL安装和配置、基础的SQL语句
JavaWEB01:MySQL基础--数据库相关概念.MySQL安装和配置.基本的SQL语句 JavaWEB02:MySQL高级--约束.数据库设计.多表查询.事务 JavaWEB03:JDBC Ja ...
最新文章
- 北京搜狗已签算法30W,西安银行总包20W,要不要毁约去银行?
- ClassLoader引发的类型转换异常(转载)
- 获取屏幕的宽和高-Display中getHeight()和getWidth() 官方废弃
- 图形处理:betweeness中心性– neo4j的密码与graphstream
- 解决链接错误:error LNK2001: 无法解析的外部符号 __iob
- (笔记)Mysql命令drop database:删除数据库
- 不断的感悟、不断的学习、不断的成长
- python --version没输出_如何在Linux上安装Python
- 分享PMP真题回忆,出征软考高级项目管理师
- 物联网智能电影院- Android
- html遮罩层动画制作,《Flash遮罩层动画的制作》的教学反思
- Tableau教程——一
- 聪哥哥教你学Python之如何爬取美女图片
- 在OpenWrt系统的路由器NETGEAR WNDR4300上安装KMS服务器vlmcsd
- 房屋租赁合同模板2020 免费下载
- Unity 本地化比较实用的实现方案
- 五线谱软件测试初学者,学习五线谱(初学者专用).pdf
- 20万+网易音乐人图鉴: 95后超70%、女歌手突破5万
- mantis 重启mysql_Mantis -- linux
- Android 10 和Android 11 适配采坑 实践篇