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

网站建设税点百度商业平台

网站建设税点,百度商业平台,网站排名优化是怎么做的,科技创新的魅力【MySQL从0讲解系列】主键(PRIMARY KEY)与唯一键(UNIQUE KEY)的区别详解 在日常开发中,我们经常会看到数据表里定义了 PRIMARY KEY 或者 UNIQUE KEY,这两者看起来好像都能“唯一约束”,很多新手…

【MySQL从0讲解系列】主键(PRIMARY KEY)与唯一键(UNIQUE KEY)的区别详解

在日常开发中,我们经常会看到数据表里定义了 PRIMARY KEY 或者 UNIQUE KEY,这两者看起来好像都能“唯一约束”,很多新手会有疑问:它们有什么区别?什么场景该用哪个?能否共存?

本文将从 概念、语法、实际效果、实战案例、注意事项、面试问答 六个维度,系统而深入地讲解两者的区别,帮助你真正理解这两个最常用的约束关键字。


一、PRIMARY KEY 与 UNIQUE KEY 的概念

关键字中文含义唯一性允许为空(NULL)一个表中个数
PRIMARY KEY主键✔️❌ 不允许只能有一个
UNIQUE KEY唯一键✔️✔️ 允许多个 NULL可以有多个

总结一句话

主键是表的唯一标识,必须唯一且非空,一个表只能有一个主键;唯一键也能唯一约束数据,但它可以为空,且可以存在多个
主键表就是一个人的身份证号,是唯一标识一个人的;唯一键是这个的一些属性,来唯一性约束这个人


二、表结构创建与 SQL 示例

2.1 创建带主键的表

CREATE TABLE users (id INT PRIMARY KEY,username VARCHAR(100),email VARCHAR(100)
);

说明

  • id 是主键,不能重复也不能为空;
  • usernameemail 没有限制,可以重复、可以为 NULL。

2.2 创建带唯一键的表

CREATE TABLE customers (customer_id INT,phone VARCHAR(20) UNIQUE,email VARCHAR(100) UNIQUE
);

说明

  • phoneemail 是唯一键,不能重复;
  • 但这两个字段 可以为 NULL,且可以出现多个 NULL,MySQL 中 NULL != NULL。

2.3 主键 + 唯一键共存的情况

CREATE TABLE employees (emp_id INT PRIMARY KEY,national_id VARCHAR(20) UNIQUE,name VARCHAR(50)
);

说明

  • emp_id 是主键,必须唯一非空;
  • national_id 是唯一键,也必须唯一,但允许为 NULL;
  • 表中两个字段都约束了唯一性,互不冲突。

三、插入数据实战对比

3.1 主键不允许重复或为空

INSERT INTO users (id, username, email) VALUES (1, 'Alice', 'alice@example.com'); -- ✅ 成功
INSERT INTO users (id, username, email) VALUES (1, 'Bob', 'bob@example.com');     -- ❌ 主键重复
INSERT INTO users (id, username, email) VALUES (NULL, 'Charlie', 'c@example.com');-- ❌ 主键不能为空

3.2 唯一键允许多个 NULL,但不允许重复值

INSERT INTO customers (customer_id, phone, email) VALUES (1, '123456', 'a@a.com'); -- ✅
INSERT INTO customers (customer_id, phone, email) VALUES (2, '123456', 'b@a.com'); -- ❌ phone 重复
INSERT INTO customers (customer_id, phone, email) VALUES (3, NULL, NULL);          -- ✅
INSERT INTO customers (customer_id, phone, email) VALUES (4, NULL, NULL);          -- ✅ NULL 可以重复

四、组合键的应用(复合主键 & 复合唯一键)

4.1 创建复合主键(两个字段组合起来作为主键)

CREATE TABLE orders (order_id INT,product_id INT,PRIMARY KEY (order_id, product_id)
);

4.2 创建复合唯一键

CREATE TABLE student_courses (student_id INT,course_id INT,UNIQUE (student_id, course_id)
);

区别

  • 主键约束组合列必须都非空且唯一;
  • 唯一键组合列可以为 NULL,但组合的非 NULL 记录必须唯一。

五、ALTER 添加主键/唯一键

-- 添加主键
ALTER TABLE users ADD PRIMARY KEY (id);-- 添加唯一键
ALTER TABLE users ADD UNIQUE (email);

六、注意事项与坑点总结

✅ 主键只能有一个

CREATE TABLE test (a INT PRIMARY KEY,b INT PRIMARY KEY
);

❌ 报错:只能定义一个主键!

✅ 唯一键可以有多个

CREATE TABLE test (a INT UNIQUE,b INT UNIQUE
);

✅ 合法,a、b 各自不能重复

✅ 唯一键允许多个 NULL(MySQL 中 NULL != NULL)

INSERT INTO test (a) VALUES (NULL);
INSERT INTO test (a) VALUES (NULL);

✅ 不会报错,多个 NULL 被认为不同值


七、常见面试问答总结

Q1:主键和唯一键的区别?

答:

  • 主键用于唯一标识一行数据,不能为 NULL,一个表只能有一个主键;
  • 唯一键也约束唯一性,但可以为 NULL,且一个表可以有多个唯一键;
  • 主键是强约束(唯一 + 非空 + 唯一标识),唯一键是弱约束(只是唯一)。

Q2:可以同时设置主键和唯一键吗?

答:
可以。一个字段作为主键,另一个或多个字段作为唯一键,不冲突。

Q3:主键和唯一键哪个更适合身份证号字段?

答:

  • 如果身份证号一定不能为空并作为唯一身份标识,建议用主键;
  • 如果表已经有主键,而身份证只是辅助唯一字段,可以设置为唯一键。

八、总结

对比点主键 PRIMARY KEY唯一键 UNIQUE KEY
唯一性
是否允许 NULL❌ 不允许✅ 允许多个 NULL
表中个数限制只能一个可以多个
是否可组合字段✅ 支持复合主键✅ 支持复合唯一键
用途唯一标识每条记录防止字段重复但非主标识

📌 小贴士

一个合理设计的数据表,应始终包含一个主键,并在必要字段上添加唯一键以保证数据完整性和规范性。


如果你觉得这篇文章对你有帮助,欢迎收藏或分享!欢迎在评论区留言你的问题,我们一起深入学习数据库设计!


http://www.dtcms.com/wzjs/250915.html

相关文章:

  • 网站建设费摊销几年微商营销
  • 做网站如何挣钱网站关键词优化的步骤和过程
  • 长沙学校网站建设网络营销策划案怎么写
  • 镇江网站公司萝卜建站
  • 怎么查网站做404页面没yahoo搜索引擎
  • 建旅游网站多少钱抖音关键词排名查询
  • 开一个网站_只做同城交易新站整站快速排名
  • 贵阳快速建站模板怎么制作自己的网站网页
  • 如何制作漂亮的微信公众号文章seo排名快速
  • 南通建设招聘信息网站域名年龄对seo的影响
  • django 网站开发案例爱站网挖掘词
  • 夫唯徒弟做外贸服装批发的seo案例 用wp做的网站网站推广怎么推广
  • 硬盘做免费嗳暧视频网站优化大师怎么卸载
  • 贵州省 政府网站建设关键词挖掘工具站
  • 镇江网站优化seo全国人大常委会副委员长
  • 模仿淘宝详情页做网站北京自动seo
  • 江苏住房建设厅网站制作网页的步骤
  • wordpress全站登陆可见如何搭建公司网站
  • 网站建设费用百度怎么推广自己的店铺
  • 静安广州网站建设seo外包服务专家
  • 中国建设人才信息网站松原今日头条新闻
  • 网站建设投标邀请函seo作弊
  • 怎么建立一个群宁波关键词优化企业网站建设
  • app跟网站的区别南宁网站关键词推广
  • 小米路由器mini做网站营销方式都有哪些
  • 怎么在国外网站做推广北京最新疫情情况
  • 建设银行etc网站网络热词2023流行语及解释
  • 做企业网站百度推广客服添加友情链接的技巧
  • 网站建设五行青岛网站seo推广
  • ps制作网站过程手机百度收录提交入口