当前位置: 首页 > 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.lryc.cn/news/621521.html

相关文章:

  • Uniapp之微信小程序自定义底部导航栏形态
  • mac 通过homebrew 安装和使用nvm
  • 【uni-app】根据角色/身份切换显示不同的 自定义 tabbar
  • 晶振电路的负载电容、电阻参数设计
  • Vue3 Element-plus 封装Select下拉复选框选择器
  • 一文打通 AI 知识脉络:大语言模型等关键内容详解
  • Docker容器定时任务时区Bug导致业务异常的环境变量配置解决方案
  • Vue3 + Element Plus 实现可搜索、可折叠、可拖拽的部门树组件
  • 【Redis】Redis典型应用——缓存
  • Redis 官方提供免费的 30 MB 云数据库
  • AI客户维护高效解决方案
  • [Chat-LangChain] 前端用户界面 | 核心交互组件 | 会话流管理
  • 制造装配、仓储搬运、快递装卸皆适配!MinkTec 弯曲形变传感器助力,让人体工学改变劳动生活
  • 测试工程师应当具备的能力
  • 专题三_二分_在排序数组中查找元素的第一个和最后一个位置
  • 手机分身空间:空间自由切换,一机体验双重生活!
  • FCC认证三星XR头显加速全球量产,微美全息AI+AR技术引领智能眼镜硬件创新
  • FreeRTOS多核支持
  • PaddleNLP进行Bart文本摘要训练
  • JavaScript 流程控制语句详解
  • 稳定且高效:GSPO如何革新大型语言模型的强化学习训练?
  • SpringCloud -- Nacos详细介绍
  • 跨网络 SSH 访问:借助 cpolar 内网穿透服务实现手机远程管理 Linux
  • 搭建前端开发环境 安装nvm nodejs pnpm 配置环境变量
  • Spark03-RDD01-简介+常用的Transformation算子
  • SQL:生成日期序列(填补缺失的日期)
  • 完整技术栈分享:基于Hadoop+Spark的在线教育投融资大数据可视化分析系统
  • 【Docker】关于hub.docker.com,无法打开,国内使用dockers.xuanyuan.me搜索容器镜像、查看容器镜像的使用文档
  • 关于截屏时实现游戏暂停以及本地和上线不同步问题
  • Java研学-SpringCloud(四)