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

这个问题要是问外国开发者,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 就成了所谓的二者的 联合主键。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值