iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql复合主键指的是什么意思
  • 518
分享到

mysql复合主键指的是什么意思

mysql 2023-04-03 22:04:47 518人浏览 泡泡鱼
摘要

本篇内容介绍了“Mysql复合主键指的是什么意思”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

本篇内容介绍了“Mysql复合主键指的是什么意思”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

mysql中,复合主键是指数据库表的主键含有一个以上的字段组成,即多字段主键;复合主键是主键的一种,与主键具有相同的功能和定义。复合主键不能包含不必要的多余列;当把复合主键的某一列删除后,如果剩下的列构成的主键仍然满足唯一性原则,那么这个复合主键是不正确的。

什么是数据表的复合主键 ?

所谓的复合主键,就是指你表的主键含有一个以上的字段组成 。

Mysql多字段主键又可以成为复合主键。复合主键也是主键的一种与主键具有相同的功能和定义。

主键约束即在表中定义一个主键来唯一确定表中每一行数据的标识符。主键可以是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键。

复合主键不能包含不必要的多余列。当把复合主键的某一列删除后,如果剩下的列构成的主键仍然满足唯一性原则,那么这个复合主键是不正确的。这是最小化原则。

例如:

create table test
(
name varchar(19),
id number,
value varchar(10),
primary key (name,id)
)

上面的name和id字段组合起来就是你test表的复合主键

它的出现是因为你的name字段可能会出现重名,所以要加上ID字段这样就可以保证你记录的唯一性

为什么会出现复合主键

这是因为表name字段可能出现重名的情况,所以要加上id字段来保证记录的唯一性,而我们在开发中,主键字段数是保持一个是比较好的,非要创建两个复合主键,那么在创建表的时候就应该寻找一个能唯一性标识该对象的一个字段来识别。

那么问题又来了,不是说一个表只能有一个主键吗?主键是一个表的唯一索引啊,那么为何一个表可以创建多个主键呢?

其实“主键是唯一的索引”这话有点歧义的,举个例子说明:我们习惯性的在表中都会有一个id字段,设置为自动增长,并设置为主键,这时候"主键是唯一的索引",id自动增长保证来唯一性。此时,在创建一个字段name varchar(50),也被设置为了主键,这时候id和name就成为了复合主键了,而表中的name字段在插入数据时是可以插入相同的name值的,这时候又有问题了,不是说"主键是唯一索引吗?怎么能有相同的值?"

所以说"主键是唯一性索引"是有歧义的;主键是唯一性索引的前提是"当表中只有一个主键时,它才是唯一的索引;当表中有多个主键时,称为复合主键,复合主键联合保证唯一性索引,即可理解为复合主键联合起来成为了一个表的唯一性索引(主键)"。为什么自增长ID已经可以作为唯一标识的主键,为啥还需要复合主键呢?因为,并不是所有的表都要有id这个字段啊,比如,我们建一个学生表,没有唯一能标识学生的ID,怎么办呢?学生的名字、年龄、班级都可能重复,无法使用单个字段来唯一标识,这时,我们可以将多个字段设置为主键,形成复合主键,这多个字段联合标识唯一性,其中,某几个主键字段值出现重复是没有问题的,只要不是有多条记录的所有主键值完全一样,就不算重复。

总结: 在开发中,主键字段数最好保持一个,非要创建两个复合主键,那么在创建表的时候就应该要寻找一个能唯一性标识该对象的一个字段来识别。简而言之就是少用复合主键。

如何添加复合主键?

可以在创建表时添加复合主键,此时主键由多个字段联合组成,语法规则如下:

PRIMARY KEY [字段1,字段2,…,字段n]

示例:创建数据表 tb_emp,假设表中没有主键 id,为了唯一确定一个员工,可以把 name、deptId 联合起来作为主键

mysql> CREATE TABLE tb_emp
    -> (
    -> name VARCHAR(25),
    -> deptId INT(11),
    -> salary FLOAT,
    -> PRIMARY KEY(id,deptId)
    -> );
Query OK, 0 rows affected (0.37 sec)

mysql复合主键指的是什么意思

联合主键

联合主键和复合主键的区别在于:联合主键体现在多个表上,复合主键体现在一个表中的多个字段。

学生表:student
create table student(
id int auto_increment comment '主键id',
name varchar(30) comment '姓名',
age smallint comment '年龄',
primary key(id)
);

课程表:course
create table course(
id int auto_increment comment '主键id',
name varchar(30) comment '课程名称',
primary key(id)
);

学生课程表:stu_course
create table IF NOT EXISTS stu_cour(
id int  auto_increment comment '主键id',
stu_id mediumint comment '学生表id',
cour_id mediumint comment '课程表id',
primary key(id)
);

此时stu_course中id就表示联合主键,通过id可以获取学生和课程的一条记录

所以联合主键,顾名思义就是多个主键联合形成一个主键组合,体现在联合。 (主键原则上是唯一的,别被唯一值所困扰) 索引可以极大的提高数据的查询速度,但是会降低插入、删除、更新表的速度,因为在执行这些写操作时,还要操作索引文件。 简单的例子 主键A跟主键B组成联合主键C,主键A跟主键B的数据可以完全相同,联合就在于主键A跟主键B形成的联合主键C是唯一的。

“mysql复合主键指的是什么意思”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

您可能感兴趣的文档:

--结束END--

本文标题: mysql复合主键指的是什么意思

本文链接: https://www.lsjlt.com/news/201282.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql复合主键指的是什么意思
    本篇内容介绍了“mysql复合主键指的是什么意思”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2023-04-03
    mysql
  • mysql指的是什么意思
    这篇文章给大家分享的是有关mysql指的是什么意思的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。mysql是关系型数据库管理系统的缩写,即MySQL是一个关系型数据库管理系统,由...
    99+
    2022-10-18
  • mysql ddl指的是什么意思
    小编给大家分享一下mysql ddl指的是什么意思,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!mysql ddl是数据定于语言的缩写,简单来说,就是对数据库内部的对象进行创建、删除、修改等操...
    99+
    2022-10-18
  • mysql root指的是什么意思
    这篇文章主要介绍mysql root指的是什么意思,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! root指的是超级管理员;MySQL在安装时,会默认创建...
    99+
    2022-10-19
  • 电脑home键指的是什么意思
    这篇文章主要介绍了电脑home键指的是什么意思的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇电脑home键指的是什么意思文章都会有所收获,下面我们一起来看看吧。电脑home键是什么意思home键的主要作用是将光...
    99+
    2023-07-01
  • MySQL中什么是数据表的复合主键
    这篇文章主要介绍MySQL中什么是数据表的复合主键,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!MySQL多字段主键又可以成为复合主键。复合主键也是主键的一种与主键具有相同的功能和定...
    99+
    2022-10-18
  • css3中关键帧指的是什么意思
    这篇文章将为大家详细讲解有关css3中关键帧指的是什么意思,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 css中关键帧是决定animatio...
    99+
    2022-10-19
  • mysql索引指的是什么意思
    这篇文章主要介绍了mysql索引指的是什么意思,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。MySQL官方对索引的定义为:索引(Index)是帮...
    99+
    2022-10-18
  • mysql中shell指的是什么意思
    这篇文章给大家分享的是有关mysql中shell指的是什么意思的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。MySQL Shell是在官方版本5.7.12推出,工具的初衷本身都是...
    99+
    2022-10-18
  • mysql中and指的是什么意思
    这篇文章主要介绍mysql中and指的是什么意思,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 在mysql中,and的意思为“并且”,用于在WHER&#...
    99+
    2022-10-19
  • Navicat for MySQL指的是什么意思
    小编给大家分享一下Navicat for MySQL指的是什么意思,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!  Navica...
    99+
    2022-10-18
  • Mysql虚表指的是什么意思
    这篇文章主要讲解了“Mysql虚表指的是什么意思”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Mysql虚表指的是什么意思”吧! ...
    99+
    2023-05-25
    mysql
  • mysql外键约束是什么意思
    MySQL外键约束指的是对表与表之间的关系进行限制的一种约束,可以在一个表中定义一个列,这个列将引用另外一个表中的列,这种关联关系可以确保数据的完整性和一致性。本教程操作系统:Windows10系统、mysql 8.0版本、Dell G3电...
    99+
    2023-07-10
  • MySQL中join buffer指的是什么意思
    小编给大家分享一下MySQL中join buffer指的是什么意思,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、说明在MySQL对于join操作的处理过程中,...
    99+
    2023-06-15
  • 在mysql中mul指的是什么意思
    这篇文章主要介绍了在mysql中mul指的是什么意思,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。在mysql中mul是Key,而key是键的意...
    99+
    2022-10-18
  • 双线主机租用指的是什么意思
    双线主机租用指的是在同一台主机上同时使用两条独立的网络线路,以提高网络连接的稳定性和速度。这种主机租用方式通常适用于需要高可靠性和高...
    99+
    2023-06-07
    双线主机租用 双线主机 主机
  • MySQL中的KEY关键字是什么意思?
    键与索引同义。如果要为列创建索引,请使用“Key”。 正如官方文档所述: KEY 通常是 INDEX 的同义词。当在列定义中给定时,键属性 PRIMARY KEY 也可以指定为 KEY。这是为了与其他数据库系统兼容而实现的。 该密钥可以与主...
    99+
    2023-10-22
  • mysql存储过程指的是什么意思
    小编给大家分享一下mysql存储过程指的是什么意思,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、说明一组预先编译好的SQL语句的集合,理解成批处理语句。可以提...
    99+
    2023-06-15
  • mysql安全模式指的是什么意思
    小编给大家分享一下mysql安全模式指的是什么意思,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是安全模式?mysql安全模...
    99+
    2022-10-18
  • Redis中的主从复制是什么意思
    本篇内容介绍了“Redis中的主从复制是什么意思”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作