主键和唯一键基本知识参考这篇文章 MySQL表的约束 ,本篇文章主要是谈一谈主键和唯一键的区别从而更好的理解唯一键和主键。
在上篇文章中已经提到
- 主键: primary key 用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键;主键所在的列通常是整数类型。
- 唯一键(unique)的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。
从技术角度来看的话二者就是一个可以为空一个不能为空,也是比较好证明的。我们只需建个表格那数据插入即可证明,在上篇文章中我们也已经实验过了。这篇文章我们来说点不一样的。
我们先来想一个问题,已经存在了主键来约束数据不能重复为什么还要有唯一键存在呢?
其实主键和唯一键并不冲突,在一个表中可以有一个主键,也可以同时具有唯一键。例如我们创建一个学生表,我们人身上是有很多具有唯一性的属性的如学号、身份证号、手机号、qq号、以及各种社交账号。同时也有一些不具有唯一性的属性如姓名、身高、体重、籍贯、年龄等等。若是只有主键存在的话那么,我们身上的其他具有唯一性的属性怎么来保证。
举个例子:
mysql> create table student(
id int unsigned primary key comment '学号',
id_card int comment '身份证号'
);
mysql> insert into student(id, id_card) values(10, 123456);
mysql> insert into student(id, id_card) values(11, 1234567);
mysql> insert into student(id, id_card) values(12, 1234567);
此时我们想找一个学生,但是我们只知道他的身份证号为1234567。可是我们查找的时候确发现身份证号为1234567的学生不止一人。从现实生活中来说每个人的省份证号是绝对不会出现重复的,而数据库本身是一个对数据约束非常严格的技术,是绝对不会让这种情况发生的。故此时我们可以将主键之外的具有唯一性的字段用唯一键来约束。
关于主键和唯一键我们可以简单理解成,主键更多的是标识唯一性的。而唯一键更多的是保证在业务上,不要和别的信息出现重复。另外主键不是设置了主键属性才成为主键的,而是对应的属性被选择成为主键。
通过上面的例子我们可以得出结论,主键和唯一键其实是协同工作的,有些场景下需要二者一起协同工作才能更好的来对表格进行约束,让我们的表格在业务上更加合理。而区别的话从技术上来说主键不能为空,而唯一键可以为空。