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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 简述 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) ;
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
NoSQL 关系型数据库 MySQL
MySQL主键与索引
MySQL主键与索引
61 1
|
4天前
|
存储 关系型数据库 MySQL
MySQL的优化利器⭐️Multi Range Read与Covering Index是如何优化回表的?
本文以小白的视角使用通俗易懂的流程图深入浅出分析Multi Range Read与Covering Index是如何优化回表
|
13天前
|
关系型数据库 MySQL 数据库
MySQL8报错:Public Key Retrieval is not allowed
MySQL8报错:Public Key Retrieval is not allowed
|
1月前
|
SQL 关系型数据库 MySQL
mysql查询语句的访问方法const、ref、ref_or_null、range、index、all
mysql查询语句的访问方法const、ref、ref_or_null、range、index、all
|
2月前
|
关系型数据库 MySQL 索引
mysql中force index强制索引
mysql中force index强制索引
14 0
|
2月前
|
关系型数据库 MySQL
MySQL创建表出现 Specified key was too long; max key length is 767 bytes
MySQL创建表出现 Specified key was too long; max key length is 767 bytes
22 2
|
2月前
|
缓存 关系型数据库 MySQL
为啥MySQL官方不推荐使用uuid或者雪花id作为主键
为啥MySQL官方不推荐使用uuid或者雪花id作为主键
31 1
|
3月前
|
存储 关系型数据库 MySQL
用雪花 ID 和 UUID 做 MySQL 主键,可以吗?
用雪花 ID 和 UUID 做 MySQL 主键,可以吗?
36 0
用雪花 ID 和 UUID 做 MySQL 主键,可以吗?
|
4月前
|
存储 关系型数据库 MySQL
MySQL约束 【主键约束丨唯一约束丨非空约束丨外键级联】
MySQL约束 【主键约束丨唯一约束丨非空约束丨外键级联】
58 0
|
3天前
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
10 0

推荐镜像

更多