当前位置: 首页 > news >正文

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;
http://www.xdnf.cn/news/1305631.html

相关文章:

  • 嵌入式:Linux软件编程:线程
  • 【详细操作指南】如何将 Moodle 与编辑器连接,以修改文档、检查和批改作业等
  • 2025年最新油管视频下载,附MassTube下载软件地址
  • 【Canvas与玻璃光】铝圈蓝底玻璃光按钮
  • 华为实验综合小练习
  • YAML:锚点深度解析,告别重复,拥抱优雅的配置艺术
  • 第二十四天:虚函数与纯虚函数
  • 【科研绘图系列】R语言绘制三维曲线图
  • MySQL多表查询案例
  • 关系型数据库从入门到精通:MySQL 核心知识全解析
  • 单片机常用通信协议(一)
  • ubuntu 24.04 通过部署ollama提供大模型api接口
  • Storage.AI解读:构建AI数据基础设施的开放标准
  • 【万字精讲】 左枝清减·右枝丰盈:C++构筑的二叉搜索森林
  • Java 中使用阿里云日志服务(SLS)完整指南
  • nifi 增量处理组件
  • 区块链:用数学重构信任的数字文明基石
  • 【0基础3ds Max】学习计划
  • 007TG洞察:特斯拉Robotaxi成本降低84%?技术驱动的效率革命对营销自动化的启示
  • 以下是对智能电梯控制系统功能及系统云端平台设计要点的详细分析,结合用户提供的梯控系统网络架构设计和系统软硬件组成,分点论述并补充关键要点:
  • 深度解读 Browser-Use:让 AI 驱动浏览器自动化成为可能
  • 初识CNN02——认识CNN2
  • 数据结构初阶:排序算法(二)交换排序
  • Boost库中boost::function函数使用详解
  • Redis面试精讲 Day 22:Redis布隆过滤器应用场景
  • 测控一体化闸门驱动灌区信息化升级的核心引擎
  • 波浪模型SWAN学习(1)——模型编译与波浪折射模拟(Test of the refraction formulation)
  • yolo安装
  • es7.x中分片和节点关系以及查看节点数
  • WEB安全--Java安全--Servlet内存马