这个问题要是问外国开发者,TA们能一脸懵逼。

在英文语境中只有 Composite Primary Key(也有叫 Compound Primary Key 的),就是一个表中如果是多个字段组成一个主键,那么这个主键就被称为这玩意儿。

至于这玩意儿你翻译成“联合主键”、“组合主键”、“混合主键”还是“复合主键”,都特么是一回事儿。

结果到了中文编程界,不知道是哪位神仙起的头儿,非得编个“联合主键”和“复合主键”的区别出来。再加上中文编程界有一大特点,就是博客或者问答习惯性东抄西搬,结果错的知识也能流传广泛甚至成为“主流”。

搬一个“流传最广”的对于“联合主键”和“复合主键”区别的文章:

“联合主键”还是单一主键,只不过往往用在关联表里,一个关联表里会涉及到多个其他表的主键组合形成一条数据,你既可以为它们设置一个“复合主键”、也可以再新加一个自增列设为“联合主键”。

举例:

--- 学生表

CREATE TABLE `student` (

`student_id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`name` varchar(20) NOT NULL,

PRIMARY KEY (`student_id`) USING BTREE

);

--- 科目表

CREATE TABLE `subject` (

`subject_id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`name` varchar(20) NOT NULL,

PRIMARY KEY (`subject_id`) USING BTREE

);

--- 分数表,用所谓的“复合主键”

CREATE TABLE `score` (

`student_id` int(10) unsigned NOT NULL,

`subject_id` int(10) unsigned NOT NULL,

`value` int(10) unsigned NOT NULL,

PRIMARY KEY (`student_id`, `subject_id`) USING BTREE

);

--- 分数表,用所谓的“联合主键”

CREATE TABLE `score` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`student_id` int(10) unsigned NOT NULL,

`subject_id` int(10) unsigned NOT NULL,

`value` int(10) unsigned NOT NULL,

PRIMARY KEY (`id`) USING BTREE,

UNIQUE INDEX `un`(`student_id`, `subject_id`) USING BTREE

);

写在最后:

再次重申,这种概念是中文编程界(或者说是中文编程博客界)人为造出的。

上面的例子看看就得了,根本就是胡编一个 联合主键 的定义出来,你会发现它其实就是一个最简单的自增主键,只不过表的逻辑上 student_id + subject_id 是唯一的,id 就成了所谓的二者的 联合主键。

mysql 联合主键 null_提问关于 mysql得联合主键和复合主键的问题相关推荐

  1. mysql show processlist info null_关于查询mysql processlist的建议

    查询mysql进程,因为数据库的sleep连接很多(一般都会在几千个左右),不建议直接show processlist或者show full Processlist 尽量去用select查询 正在ru ...

  2. 超键、候选键、主键、外键、联合主键、复合主键

    首先看看各种键的定义: 超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键(只要有一个键唯一,再随便组其他的键,合起来叫主键) 候选键(candidatekey):不含有多余 ...

  3. 数据库原理与应用(SQL Server)教程 主键、外键以及联合主键、复合主键和设置种子数目和增量

    文章目录 前言 一.主键.联合主键和复合主键 (一)主键 (二)联合主键 (三)复合主键 二.外键.设置种子数目和增量 (一)外键的概念 (二)添加外键 (三)设置种子数目和增量 结语 前言 这篇文章 ...

  4. SpringData JPA复合主键

    一.JPA和复合主键的简介        JPA全称Java Persistence API,是一组用于将数据存入数据库的类和方法的集合.JPA通过JDK5.0注解或XML描述对象-关系表的映射关系, ...

  5. Hibernate复合主键映射

    目录: 1. 实现方式一:将复合主键对应的属性与实体其他普通属性放在一起 2. 实现方式二:将主键属性提取到一个主键类中,实体类只需包含主键类的一个引用 在日常开发中会遇到这样一种情况,数据库中的某张 ...

  6. java 复合主键,Spring Data Jpa 复合主键的实现

    前言 这次大创有个需求,在数据库建表时发现,user表与project表的关系表 user_project的主键为复合主键: CREATE TABLE user_project( user_id IN ...

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

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

  8. mysql 联合主键_深入理解Mysql索引底层数据结构与算法,背后的故事

    引言 索引是帮助MySQL高效获取数据的排好序的数据结构 索引数据结构对比 二叉树 左边子节点的数据小于父节点数据,右边子节点的数据大于父节点数据.如果col2是索引,查找索引为89的行元素,那么只需 ...

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

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

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

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

最新文章

  1. Fragment 之间传递数据
  2. 2015华为校招机试题
  3. php连接mysql数据,php连接mysql数据库
  4. CentOS忘记普通用户密码解决办法
  5. Linux工作笔记-查看tcp与udp端口并对比Windows简单分析
  6. 【机器人】9-10月项目疑惑
  7. python数字图像处理(14):高级滤波
  8. EasyExcel 并发读取文件字段并进行校验,数据写入到新文件,批量插入数据到数据库
  9. QT5软件开发入门到项目实战PDF(配完整示例代码)(持续更新)
  10. 093 一个人的固执里,藏着低水平的认知
  11. 【转】Java Hotspot G1 GC的一些关键技术
  12. python爬虫爬取糗百成人图片单线程版本
  13. R数据科学-第六章用dplyr处理关系数据
  14. HTML中abbr标记,HTML abbr标记
  15. 你会用turtle画画吗?
  16. vscode debug Attach mode
  17. 原油有所反弹但空间依然不大
  18. 荣耀7x Android8,荣耀7X升级安卓8.0
  19. Excel嵌入网页(一)
  20. div在屏幕中如何实现居中效果

热门文章

  1. H3C PPP MP协议
  2. 新旧音标对照表与英式音标表
  3. NoSQLBooster for MongoDB的下载,安装,连接数据库,查询
  4. 推荐ietester工具
  5. nc 监听数据_nc 命令使用详解
  6. mysql存储特殊表情符号_解决mysql存储特殊文字(表情符号)utf8mb4-阿里云开发者社区...
  7. 贝叶斯网络之父Judea Pearl力荐、LeCun点赞,这篇长论文全面解读机器学习中的因果关系
  8. Python进阶(九) -- 操作excel文件
  9. 【自用记录向】YOLOv5模型训练,按进度更新
  10. 你未必知道的 WebRTC:前世、今生、未来