简述 MySQL 的主键 PRIMARY KEY 和唯一键 UNIQUE INDEX

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 简述 MySQL 的主键 PRIMARY KEY 和唯一键 UNIQUE INDEX

一、前言

本文你将会学到

  • 什么是主键 PRIMARY KEY ?
  • 主键必须是唯一的吗?
  • 如何设置表的主键?
  • 主键和唯一索引有什么区别?

二、什么是主键 PRIMARY KEY ?

主键是唯一标识表中每一行的一列或一组列。主键遵循以下规则:

  • 主键必须包含唯一值。如果主键由多个列组成,则这些列中的值组合必须是唯一的。
  • 主键列不能有值。任何插入主键列的尝试都将导致错误。请注意,MySQL 隐式地将约束添加到主键列。
  • 一个表只能有一个主键。

由于MySQL处理整数的速度更快,因此主键列的数据类型应该是整数,例如。并且应确保主键的整数类型的值范围足以存储表可能具有的所有可能行。

三、主键必须是唯一的吗?

是的,主键必须是唯一的。

四、如何设置表的主键?

我们可以在创建表的时候设置主键。

如果主键有一列,则可以将该约束用作列约束

CREATE TABLE table_name( 
primary_key_column datatype PRIMARY KEY, 
);

也可以使用表约束

CREATE TABLE table_name ( 
    primary_key_column datatype, 
    PRIMARY KEY(primary_key_column)
);

当主键有多个列时,必须将约束用作表约束

CREATE TABLE table_name ( 
primary_key_column1 datatype, 
primary_key_column2 datatype, 
PRIMARY KEY ( column_list ) );

更新表结构的时候也可以设置主键。

ALTER TABLE table_name
ADD PRIMARY KEY(column_list);

五、主键和唯一索引有什么区别?

  • PRIMARY KEY 不能为 NULL
  • UNIQUE INDEX 可以为 NULL

如何添加唯一索引。

ALTER TABLE users
ADD UNIQUE INDEX username_unique (username ASC) ;
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
10天前
|
关系型数据库 MySQL 数据库
MySQL删除全局唯一索引unique
这篇文章介绍了如何在MySQL数据库中删除全局唯一的索引(unique index),包括查看索引、删除索引的方法和确认删除后的状态。
32 9
|
3月前
|
关系型数据库 MySQL 测试技术
MySQL 报错 ERROR 1709: Index column size too large
MySQL 报错 ERROR 1709: Index column size too large
171 4
|
3月前
|
关系型数据库 MySQL 数据库
Mysqlbug-Could not create or access the registry key needed for the MySQL applicationto, TIMESTAMP w
Mysqlbug-Could not create or access the registry key needed for the MySQL applicationto, TIMESTAMP w
|
4月前
|
缓存 关系型数据库 MySQL
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
89 3
|
5月前
|
存储 关系型数据库 MySQL
MySQL的优化利器⭐️Multi Range Read与Covering Index是如何优化回表的?
本文以小白的视角使用通俗易懂的流程图深入浅出分析Multi Range Read与Covering Index是如何优化回表
|
5月前
|
关系型数据库 MySQL 数据库
MySQL8报错:Public Key Retrieval is not allowed
MySQL8报错:Public Key Retrieval is not allowed
1964 1
|
5月前
|
SQL 关系型数据库 MySQL
mysql查询语句的访问方法const、ref、ref_or_null、range、index、all
mysql查询语句的访问方法const、ref、ref_or_null、range、index、all
|
5月前
|
关系型数据库 MySQL 索引
mysql中force index强制索引
mysql中force index强制索引
39 0
|
18天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
20天前
|
存储 SQL 关系型数据库
使用MySQL Workbench进行数据库备份
【9月更文挑战第13天】以下是使用MySQL Workbench进行数据库备份的步骤:启动软件后,通过“Database”菜单中的“管理连接”选项配置并选择要备份的数据库。随后,选择“数据导出”,确认导出的数据库及格式(推荐SQL格式),设置存储路径,点击“开始导出”。完成后,可在指定路径找到备份文件,建议定期备份并存储于安全位置。
160 11
下一篇
无影云桌面