MySQL主键作用与使用方法详解

 更新时间:2026年01月24日 08:42:08   作者:Algebraaaaa  
主键是数据库表中的一个或多个字段(列),它的值用于唯一地标识表中的某一条记录,这篇文章主要介绍了MySQL主键作用与使用方法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

在 MySQL 数据库中,主键(Primary Key) 是表结构设计中最重要的约束之一。它不仅是数据唯一性的保障,也是多表关联、查询优化的核心工具。本文将从 主键的作用主键的用法 两个方面进行讲解,并配合代码示例帮助理解

一、主键的作用

1. 唯一标识记录

主键的主要作用是唯一标识表中的每一行数据

  • 主键列的值必须 唯一(Unique)

  • 主键列的值不能 为空(NOT NULL)

示例

CREATE TABLE users (
    id INT PRIMARY KEY,        -- 主键
    username VARCHAR(50),
    email VARCHAR(100)
);

INSERT INTO users (id, username, email) VALUES
(1, 'Alice', 'alice@example.com'),
(2, 'Bob',   'bob@example.com');

此时 id 作为主键,不能重复,也不能为 NULL
如果你执行:

INSERT INTO users (id, username, email) VALUES (1, 'Charlie', 'charlie@example.com');

会报错:

Duplicate entry '1' for key 'PRIMARY'

2. 保证数据完整性

主键约束能有效防止重复数据出现,从而保证数据的一致性

示例

CREATE TABLE customers (
    email VARCHAR(100) PRIMARY KEY,
    name  VARCHAR(50)
);

此时任何两行都不能有相同的 email,避免一个邮箱重复注册。

3. 作为外键的目标

主键是外键关联的基础。其他表的外键字段通常引用某个表的主键,从而建立 一对多多对多 关系。

示例

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id  INT,
    FOREIGN KEY (user_id) REFERENCES users(id)
);

这样 orders.user_id 必须是 users.id 中已存在的值,防止出现无效的订单记录

4. 提高查询性能

InnoDB 存储引擎中,主键会自动创建 聚簇索引(Clustered Index),数据存储会按主键顺序组织

查询时,如果条件中包含主键,MySQL 可以直接定位到目标行,而无需全表扫描

示例

SELECT * FROM users WHERE id = 2;

会直接通过主键索引定位到目标行,速度非常快。

二、主键的使用方法

1. 创建表时定义主键

CREATE TABLE products (
    product_id INT PRIMARY KEY,
    name       VARCHAR(100),
    price      DECIMAL(10,2)
);

2. 创建表后添加主键

ALTER TABLE products
ADD PRIMARY KEY (product_id);

3. 复合主键(多个列组成主键)

当单一字段不足以唯一标识一行数据时,可以使用 复合主键

CREATE TABLE order_items (
    order_id INT,
    product_id INT,
    quantity INT,
    PRIMARY KEY (order_id, product_id)
);

此时 order_idproduct_id 的组合必须唯一。

4. 自增主键(AUTO_INCREMENT)

让主键自动递增,避免手动输入 ID:

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50),
    email VARCHAR(100)
);

5. 删除主键

ALTER TABLE products
DROP PRIMARY KEY;

总结 

到此这篇关于MySQL主键作用与使用方法的文章就介绍到这了,更多相关MySQL主键使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SQL Server实现全文搜索查询详解

    SQL Server实现全文搜索查询详解

    这篇文章介绍了SQL Server的全文搜索功能,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • mysql 存在该记录则更新,不存在则插入记录的sql

    mysql 存在该记录则更新,不存在则插入记录的sql

    非常不错的功能,主要用于更新特定的记录,如果存在这条记录则更新一下,如果不存在则插入记录。应用于配置文件等。
    2010-04-04
  • MySQL对大量数据进行分页查询的实战指南

    MySQL对大量数据进行分页查询的实战指南

    在处理百万级以上数据时,传统LIMIT offset, row_count分页方式会随着offset增大导致性能急剧下降,本文深度解析八大优化策略,实测数据显示优化后查询速度可提升20倍以上,需要的朋友可以参考下
    2025-09-09
  • mysql中group by与having合用注意事项分享

    mysql中group by与having合用注意事项分享

    在mysql中group by分组查询我们经常会用到,并且还同时会与having合用,下面我介绍group by用法与having合用注意事项,希望此教程对各位朋友有所帮助
    2013-10-10
  • mysql使用SQLyog导入csv数据不成功的解决方法

    mysql使用SQLyog导入csv数据不成功的解决方法

    给mysql导入数据,选中某个表选择导入--导入使用本地csv数据即可,单有的时候不知道什么问题导入不成功
    2014-07-07
  • MySQL中InnoDB存储引擎的锁的基本使用教程

    MySQL中InnoDB存储引擎的锁的基本使用教程

    这篇文章主要介绍了MySQL中InnoDB存储引擎的锁的基本概念,是MySQL入门学习中的基础知识,需要的朋友可以参考下
    2015-11-11
  • mysql设置update时间字段自动更新的实现

    mysql设置update时间字段自动更新的实现

    本文主要介绍了在MySQL中实现时间字段的自动更新功能,通过设置on update CURRENT_TIMESTAMP属性来避免在更新时手动更新时间字段,具有一定的参考价值,感兴趣的可以了解一下
    2025-10-10
  • Mysql如何优化查询速度

    Mysql如何优化查询速度

    这篇文章主要介绍了Mysql如何优化查询速度问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • MySQL 触发器的基础操作(六)

    MySQL 触发器的基础操作(六)

    这篇文章主要为大家详细介绍了MySQL 触发器的基础操作,告诉大家什么是MySQL触发器,如何查看触发器,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • MySQL批量插入遇上唯一索引避免方法

    MySQL批量插入遇上唯一索引避免方法

    以前使用SQL Server进行表分区的时候就碰到很多关于唯一索引的问题,今天我们来了解MySQL唯一索引的一些知识:包括如何创建,如何批量插入,还有一些技巧上SQL,感兴趣的朋友可以了解下
    2013-01-01

最新评论