1、MySQL的主键
"主键" 的完整称呼是 "主键约束" 。MySQL 主键约束是一个列或者列的组合(其中由多列组合的主键称为复合主键),其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可以强制表的实体完整性。。
(1)一个表可以没有主键,而且最多只能有一个主键。
(2)主键值必须唯一标识表中的每一行,且不能为 NULL,即同一个表中不可能存在两行数据有相同的主键值。
2、MySQL的唯一约束
MySQL唯一约束(Unique Key)是指所有记录中字段的值不能重复出现。例如:为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况。如果其中一条记录的 id 值为 "0001" ,那么该表中就不能出现另一条记录的 id 值也为 "0001" 。
唯一约束可以确保一列或者几列不出现重复值。
唯一约束与主键约束相似的是它们都可以确保列的唯一性。不同的是,唯一约束在一个表中可有多个,并且设置唯一约束的列允许有空值,但是最多只能有一个空值。而主键约束在一个表中只能有一个,且不允许有空值。比如,在用户信息表中,为了避免表中用户名重名,可以把用户名设置为唯一约束。
唯一约束可以在创建表时直接设置,通常设置在除了主键以外的其它列上。
如果业务中要求两个字段联合起了是唯一的,比如 "地址" + "名称" 是唯一的,这就需要对两列甚至多列添加联合唯一约束。
3、主键约束和唯一约束的区别是:
(1) 主键约束一定是唯一约束,唯一约束并不一定就是主键约束。
(2) 一个表中可以有多个唯一约束,但最多只能有一个主键约束。
(3) 主键约束的列值不允许为空值,而唯一约束的列值最多有一个空值。
4、主键约束和唯一索引的区别是:
(1) 主键一定是唯一索引,唯一索引并不一定就是主键。
(2) 一个表中可以有多个唯一索引,但最多只能有一个主键。
(3) 主键的列值不允许为空值,而唯一索引的列值最多有一个空值。
5、唯一约束和唯一索引的区别是:
(1)唯一约束和唯一索引,都可以实现列数据的唯一,列值可以有空值。
(2)创建唯一约束的时候,会自动创建一个同名的唯一索引,该索引不能单独删除,删除约束会自动删除索引。唯一约束是通过唯一索引来实现数据的唯一。
(3)创建一个唯一索引,这个索引就是独立,可以单独删除。
(4)如果一个列上想有约束和索引,且两者可以单独的删除。可以先建唯一索引,再建同名的唯一约束。
(5)如果表的一个字段,要作为另外一个表的外键,那么这个字段必须有唯一约束(或是主键),如果只是有唯一索引,就会报错。