所谓的复合主键 就是指你表的主键含有一个以上的字段组成,不使用无业务含义的自增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,怎么办呢,学生的名字、年龄、班级都可能重复,无法使用单个字段来唯一标识,这时,我们可以将多个字段设置为主键,形成复合主键,这多个字段联合标识唯一性,其中,某几个主键字段值出现重复是没有问题的,只要不是有多条记录的所有主键值完全一样,就不算重复。

怎么把复合主键改为单一主键

一个表只能有一个主键:

基于一列的主键:

alter table test add constraint PK_TEST primary key(ename);

基于多列的联合主键:

alter table test add constraint PK_TEST primary key(ename,birthday);

mysql 复合主键 单独_怎么把复合主键改为单一主键相关推荐

  1. python爬斗鱼直播房间名和主播名_斗鱼爬虫,爬取颜值频道的主播图片和名字

    在斗鱼的界面中,如果滚动条没有拉下去,那么下面的图片都只是一条鱼的图片,所以要使浏览器自动拉动滚动条,可以用到python的selenium库, 1.配置浏览器 要使用selenium,还需要安装 c ...

  2. mysql隐式锁定辅助索引_当Mysql - InnoDB行锁遇到复合主键和多列索引-Go语言中文社区...

    背景 今天在配合其他项目组做系统压测,过程中出现了偶发的死锁问题.分析代码后发现有复合主键的update情况,更新复合主键表时只使用了一个字段更新,同时在事务内又有对该表的insert操作,结果出现了 ...

  3. mysql复合主键优缺点_提问关于 mysql得联合主键和复合主键的问题

    这个问题要是问外国开发者,TA们能一脸懵逼. 在英文语境中只有 Composite Primary Key(也有叫 Compound Primary Key 的),就是一个表中如果是多个字段组成一个主 ...

  4. hive导数据到mysql 自增主键出错_老大问我:“建表为啥还设置个自增 id ?用流水号当主键不正好么?”...

     前言"又要开始新项目了,一顿操作猛如虎,梳理流程加画图.这不,开始对流程及表结构了.我:吧啦吧啦吧啦 --老大:这个建表为啥还设置个自增 id ?直接用流水号(用户号/产品号)当主键不就行 ...

  5. mysql中有主键和外键吗_谈谈mysql的主键和外键

    主键:保证数据的唯一性,非空且唯一,一般设置主键的语法为:字段 类型 PRIMARY KEY;或者 字段 类型,PRIMARY KEY(字段名) 外键:保证数据的完整性,一致性.一般设置的外键关联的是 ...

  6. 权限表使用联合主键吗_天天写 order by,你知道Mysql底层执行流程吗?

    前言 在实际的开发中一定会碰到根据某个字段进行排序后来显示结果的需求,但是你真的理解order by在 Mysql 底层是如何执行的吗? 假设你要查询城市是苏州的所有人名字,并且按照姓名进行排序返回前 ...

  7. mysql一个表中可以有几个主键_数据库的单个数据表中有几个主键?

    数据库的单个数据表中只能有一个主键.数据库主键,指的是一个列或多列的组合,其值能唯一地标识表中的每一行,通过它可强制表的实体完整性:主键主要是用与其他表的外键关联,以及本记录的修改与删除. 数据库的单 ...

  8. 分区字段必须包含在主键字段_十年Java开发经验分享:24 个必须掌握的数据库面试问题...

    一.为什么用自增列作为主键 1.如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引. 如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为 ...

  9. mysql可视化创建外键说明_关于使用可视化图形工具navicat for mysql来创建外键的步骤...

    主键:主键是一张表的唯一标识符,应该让其处于不可被外界更改状态. 且主键对于用户来说是无意义的,为了明确这一点,我们应该让主键处于一种幽魂状态,即主键存在,但其他人并不感觉到它存在. 外键:创建外键是 ...

最新文章

  1. h3c 3600 acl 配置 滤源IP是网关的ARP报文的ACL规则
  2. xdebug与wincachegrind配置
  3. SAP BI工具的优缺点
  4. win7系统出现蓝屏0x0000003b怎么解决
  5. [七]JavaIO之 PipedInputStream 和 PipedInputStream
  6. MyDAL - is null is not null 条件 使用
  7. Trusted Execution Technology (TXT) --- 基本原理篇
  8. Hybrid App基础知识
  9. 360全景倒车影像怎么看_360全景倒车影像开的时候能看到前面的状况吗
  10. GhostXP_SP3电脑装机终极版V9.7 (NTFS版)
  11. 360安全卫士防黑加固关闭了Telnet远程连接服务,如何开启?
  12. 什么样的耳机戴着舒服些、最好用的的几款骨传导蓝牙耳机推荐
  13. keil下汇编语言调试分析
  14. Apex开发人员指南
  15. 炼钢-连铸生产动态调度模型(加启发式算法步骤)
  16. Wandb——Pytorch模型指标可视化及超参搜索
  17. 南京邮电大学网络攻防平台WriteUP——WEB(上)
  18. Jenkins自动化部署前端Vue项目
  19. qq服务器维护到什么时候,2021qq扩列维护到什么时候?qq扩列升级什么时候结束?...
  20. 手写数学公式识别领域最新论文CAN代码梳理,以及用自己的数据集训练

热门文章

  1. 最新ChatGPT商业网站源码+支持ChatGPT4.0+新增GPT联网功能+支持ai绘画+实时语音识别输入+用户会员套餐
  2. paddle 中的backward()函数
  3. 读后感:物以类聚,人以群分--走出软件作坊:三五个人十来条枪 如何成为开发正规军(十一)
  4. mysql使用localhost可以连接,使用ip连接不上
  5. python模块之 异步channels实现
  6. Ngix可以做的事情介绍
  7. yolov3口罩检测
  8. 第46屆ICPC 東亞洲區域賽(澳門)
  9. java玩gbc,GB/GBC游戏能玩?
  10. 安卓开机logo和开机动画的几种实现方法