Swayam Shah Asked: 2022-01-22 17:35:16 +0800 CST2022-01-22 17:35:16 +0800 CST 2022-01-22 17:35:16 +0800 CST 为什么我们有主键时需要唯一键? 772 我试图用谷歌搜索这个问题,但我发现的只是主键和唯一键之间的区别,当我们有一个可以识别任何单个记录的主键时,为什么我们实际上需要一个唯一键,有人可以提供一个例子来解释这一点或提供一个解释这一点的链接。 mysql primary-key 1 个回答 Voted Best Answer Rick James 2022-01-22T18:15:57+08:002022-01-22T18:15:57+08:00 当我们有一个主键时,为什么我们实际上需要一个唯一键? 简短的回答——你没有。 长答案: 在 MySQL 中,PRIMARY KEYis a UNIQUEkey 是INDEX. 只有一个PRIMARY KEY;它的主要功能是唯一标识每一行。 一个UNIQUE键允许包含一个列NULLable。 UNIQUE是唯一性约束和索引。 任何类型的索引都可能包含多个列;定义中列的顺序很重要。(子句中条件的顺序WHERE无关紧要。) AFOREIGN KEY是 aCONSTRAINT并且它隐式地创建一个INDEX如果还没有一个适用于约束的。 这些对中的每一对都是多余的;删除第二个: PRIMARY KEY (a) UNIQUE (a) INDEX(c,d) INDEX(c) UNIQUE(e) UNIQUE(e,f) UNIQUE(h) UNIQUE(g,h) -- or consider making changing to INDEX(g,h) 如果您构建一个没有 aPRIMARY KEY但有UNIQUE键的表,请考虑将“唯一”更改为“主键”。 一个表很少需要 3 个UNIQUE键(包括 PK);重新考虑架构。 一些程序员总是有一个AUTO_INCREMENT(通常命名为id)作为PRIMARY KEY. 但这并不总是必要的,而且有时会干扰性能。 警告:上述某些陈述可能不适用于 MySQL 和 MariaDB 以外的 RDBMS。 警告:索引前缀、分区和其他一些晦涩的东西没有在上面介绍。 PK + UNIQUE 的两种常见情况: 查找表(用于“规范化”):该表有一个id(auto_increment,PK)和一个字符串(Unique)。 多对映射表:两列,每列都指向id其他表。PK 将是按某种顺序排列的一对列;这UNIQUE将是另一个顺序的对。(从技术上讲,对于第二个索引来说,plainINDEX就足够了。)
简短的回答——你没有。
长答案:
在 MySQL 中,
PRIMARY KEY
is aUNIQUE
key 是INDEX
.只有一个
PRIMARY KEY
;它的主要功能是唯一标识每一行。一个
UNIQUE
键允许包含一个列NULLable
。UNIQUE
是唯一性约束和索引。任何类型的索引都可能包含多个列;定义中列的顺序很重要。(子句中条件的顺序
WHERE
无关紧要。)A
FOREIGN KEY
是 aCONSTRAINT
并且它隐式地创建一个INDEX
如果还没有一个适用于约束的。这些对中的每一对都是多余的;删除第二个:
如果您构建一个没有 a
PRIMARY KEY
但有UNIQUE
键的表,请考虑将“唯一”更改为“主键”。一个表很少需要 3 个
UNIQUE
键(包括 PK);重新考虑架构。一些程序员总是有一个
AUTO_INCREMENT
(通常命名为id
)作为PRIMARY KEY
. 但这并不总是必要的,而且有时会干扰性能。警告:上述某些陈述可能不适用于 MySQL 和 MariaDB 以外的 RDBMS。
警告:索引前缀、分区和其他一些晦涩的东西没有在上面介绍。
PK + UNIQUE 的两种常见情况:
id
(auto_increment,PK)和一个字符串(Unique)。id
其他表。PK 将是按某种顺序排列的一对列;这UNIQUE
将是另一个顺序的对。(从技术上讲,对于第二个索引来说,plainINDEX
就足够了。)