如何添加主键_mysql primary key设置

发布时间 - 2026-01-23 00:00:00    点击率:
MySQL中添加主键需在建表时用PRIMARY KEY定义单字段或联合主键,或对已有表用ALTER TABLE ADD PRIMARY KEY;不支持直接修改,须先DROP再ADD;主键字段须非空唯一,建议用稳定自增字段,InnoDB下主键即聚簇索引。

在 MySQL 中添加主键(PRIMARY KEY)是确保表中每条记录唯一性的关键操作。主键可以是一个字段,也可以是多个字段的组合(联合主键),且一个表只能有一个主键,其值不允许为 NULL。

创建表时直接定义主键

这是最常用的方式,在 CREATE TABLE 语句中通过 PRIMARY KEY 关键字指定:

  • 单字段主键:将 PRIMARY KEY 放在字段定义后,或单独写在表定义末尾
  • 联合主键:用括号列出多个字段,如 PRIMARY KEY (id, category_id)

示例:

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

给已有表添加主键

使用 ALTER TABLE ... ADD PRIMARY KEY 语法。注意:目标字段必须满足主键要求(非空、唯一、无重复值)。

  • 单字段主键:ALTER TABLE users ADD PRIMARY KEY (id);
  • 联合主键:ALTER TABLE orders ADD PRIMARY KEY (order_id, product_id);
  • 若字段含 NULL 或重复数据,需先清理(如用 UPDATE 补全、DELETE 去重)再执行

修改主键(替换或删除后重建)

MySQL 不支持直接修改主键,但可通过“删除 + 新增”实现:

  • 先删除原主键:ALTER TABLE users DROP PRIMARY KEY;
  • 再添加新主键:ALTER TABLE users ADD PRIMARY KEY (username);
  • 注意:如果原主键是自增列(AUTO_INCREMENT),删除后该属性也会丢失,需重新指定

常见注

意事项

避免踩坑的关键点:

  • 主键字段建议设为 NOT NULL(即使不显式声明,MySQL 也会自动加上)
  • 尽量选用稳定、无业务含义的字段(如自增 INTBIGINT)作主键,避免用手机号、邮箱等可能变更的数据
  • 联合主键会增加索引体积和查询复杂度,仅在逻辑上确实需要多字段唯一约束时才使用
  • InnoDB 引擎下,主键即聚簇索引,直接影响数据物理存储顺序,对性能影响显著


# mysql  # go  # ai  # 邮箱  # NULL  # int  # delete  # table  # 主键  # 也会  # 多个  # 已有  # 不支持  # 多字  # 是一个  # 这是  # 放在  # 设为 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 使用spring连接及操作mongodb3.0实例  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  MySQL查询结果复制到新表的方法(更新、插入)  node.js报错:Cannot find module 'ejs'的解决办法  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  想要更高端的建设网站,这些原则一定要坚持!  如何用狗爹虚拟主机快速搭建网站?  laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  微信小程序 input输入框控件详解及实例(多种示例)  如何在阿里云服务器自主搭建网站?  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  如何基于云服务器快速搭建个人网站?  jQuery 常见小例汇总  如何在建站宝盒中设置产品搜索功能?  Laravel怎么实现模型属性的自动加密  香港网站服务器数量如何影响SEO优化效果?  音响网站制作视频教程,隆霸音响官方网站?  SQL查询语句优化的实用方法总结  如何快速选择适合个人网站的云服务器配置?  高防服务器如何保障网站安全无虞?  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  如何快速搭建FTP站点实现文件共享?  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  如何快速搭建支持数据库操作的智能建站平台?  Android使用GridView实现日历的简单功能  如何在不使用负向后查找的情况下匹配特定条件前的换行符  如何做网站制作流程,*游戏网站怎么搭建?  C++时间戳转换成日期时间的步骤和示例代码  Laravel如何发送系统通知?(Notification渠道示例)  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  千库网官网入口推荐 千库网设计创意平台入口  新三国志曹操传主线渭水交兵攻略  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  北京网站制作的公司有哪些,北京白云观官方网站?  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  如何构建满足综合性能需求的优质建站方案?  Laravel如何为API编写文档_Laravel API文档生成与维护方法  如何用PHP快速搭建CMS系统?  PHP 500报错的快速解决方法  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  如何用免费手机建站系统零基础打造专业网站?  韩国服务器如何优化跨境访问实现高效连接?  Laravel如何处理CORS跨域请求?(配置示例)  Laravel集合Collection怎么用_Laravel集合常用函数详解  Python3.6正式版新特性预览