当前位置: 代码网 > it编程>数据库>Mysql > MySQL主键作用与使用方法详解

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

2026年01月25日 Mysql 我要评论
前言在 mysql 数据库中,主键(primary key) 是表结构设计中最重要的约束之一。它不仅是数据唯一性的保障,也是多表关联、查询优化的核心工具。本文将从 主键的作用 和 主键的用法 两个方面

前言

在 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主键使用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com