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

数据库中的主键(Primary Key)

数据库中的主键(Primary Key)

主键是数据库表中用于唯一标识每一行记录的一个或多个列的组合,是关系型数据库中的重要概念。

主键的核心特性

  1. 唯一性:主键值必须唯一,不能重复
  2. 非空性:主键列不能包含NULL值
  3. 不可变性:主键值一旦确定,通常不应更改(虽然技术上可以)

主键的作用

  1. 唯一标识:确保表中每一行数据都可以被唯一识别
  2. 提高查询效率:数据库会自动为主键创建索引
  3. 建立表关系:用于与其他表建立外键关系
  4. 数据完整性:防止重复数据的插入

主键的类型

  1. 自然主键:使用业务中自然存在的唯一标识(如身份证号、学号等)

    • 优点:有意义,便于理解
    • 缺点:可能变更,长度可能不理想
  2. 代理主键:使用与业务无关的字段作为主键(如自增ID、GUID等)

    • 优点:稳定、简单、长度固定
    • 缺点:无业务意义

主键的实现方式

1. 单列主键

CREATE TABLE students (student_id INT PRIMARY KEY,  -- 直接定义主键name VARCHAR(50)
);

2. 多列组合主键(复合主键)

CREATE TABLE course_registration (student_id INT,course_id INT,registration_date DATE,PRIMARY KEY (student_id, course_id)  -- 组合主键
);

3. 自增主键(常用)

CREATE TABLE employees (emp_id INT AUTO_INCREMENT PRIMARY KEY,  -- 自动递增emp_name VARCHAR(50)
);

主键与索引的关系

  • 主键会自动创建唯一索引( clustered index,聚集索引)
  • 一个表只能有一个主键,但可以有多个唯一索引
  • 主键索引的查询效率通常是最高的

主键的最佳实践

  1. 尽量使用短小的主键(如INT比VARCHAR更高效)
  2. 优先考虑代理主键而非自然主键
  3. 避免使用可能变更的业务字段作为主键
  4. 在InnoDB中,主键还影响物理存储顺序

主键与唯一键的区别

特性主键(Primary Key)唯一键(Unique Key)
NULL值不允许允许(除非明确设置为NOT NULL)
数量每表只能有一个每表可以有多个
自动创建索引总是总是
用于外键关系可以可以

理解主键的概念对于设计高效、可靠的数据库结构至关重要。

http://www.xdnf.cn/news/2819.html

相关文章:

  • uni-app vue3 实现72小时倒计时功能
  • css中:is和:where 伪函数
  • Dia-1.6B环境搭建推理测试
  • docker本地部署ClipCascade,实现跨设备剪贴板同步
  • 【大语言模型开发】BPE算法(Byte-Pair)
  • 跨端开发技术总结
  • Python爬虫实战:获取软科网最新特定专业大学排名数据并做分析,为高考填报志愿做参考
  • 逆向设计——CWDM_splitter
  • 10.Excel:快速定位目标值
  • QT—布局管理器之BoxLayout篇
  • 【Java ee初阶】多线程(4)
  • 培养一个输出型的爱好
  • Profinet 从站转 EtherNet/IP 从站网关
  • MATLAB实现神经网络的OCR识别
  • 爬虫学习笔记(三)--Http协议
  • CSS元素动画篇:基于页面位置的变换动画
  • leetcode 19. 删除链表的倒数第 N 个结点
  • [多彩数据结构] 笛卡尔树
  • 智能Python开发工具PyCharm v2025.1——AI层级功能重磅升级
  • Ajax 提交表单与文件上传
  • Windows 图形显示驱动-待机休眠优化
  • 升级Xcode16,flutter项目报错
  • 浏览器插件,提示:此扩展程序未遵循 Chrome 扩展程序的最佳实践,因此已无法再使用
  • jeecgboot 3.8.0 集成knife4j问题一文解决
  • MCP:如何通过模型控制推理助力AI模型实现“深度思考”?
  • 机器视觉的坐标标定
  • Python分支结构全面解析与实战应用指南
  • opendds编译开发(c#封装)
  • Android WebRTC回声消除
  • 具身智能:从理论突破到场景落地的全解析