MySQL: 主键默认是唯一的吗?

MySQL: is primary key unique by default?

如果我在MySQL中定义一个列作为主键,默认情况下它也是唯一键还是做我还需要将其定义为 unique key(如果我希望它是唯一的)?

我看到这个问题 What is the difference b/w Primary Key and Unique Key 解释了两者之间的区别,但没有完全回答我的问题。

默认情况下 PK 是英国还是我需要明确定义它?

根据定义,主键始终是唯一的。不仅在 MySQL。 所以你不需要任何额外的唯一键。

Primary key is always unique 每 SQL。您不必将其明确定义为 UNIQUE。

旁注: 在 table 中只能有一个主键,并且它永远不允许空值。你也可以在 table 中只有一个主键约束(因为创建主键的目的是唯一标识你的 table 中的行)但是你可以在你的中有多个唯一键约束table.

示例:

一名员工详细信息 table 将 EmpID 作为主键,将 EmpPhoneNo 作为唯一键。

请注意,组合键可能会导致混淆:实际上主键可以是组合键,DESCRIBE 会将所有组合键组件显示为主键:

> DESCRIBE foobar;
+----------------------+------------------+------+-----+---------+-------+
| Field                | Type             | Null | Key | Default | Extra |
+----------------------+------------------+------+-----+---------+-------+
| column_A             | int(10) unsigned | NO   | PRI | NULL    |       |
| column_B             | int(10) unsigned | NO   | PRI | NULL    |       |
+----------------------+------------------+------+-----+---------+-------+

然而 SHOW CREATE TABLE 将显示现实:

> SHOW CREATE TABLE foobar;
+--------+---------------------------…+
| Table  | Create Table              …|
+--------+---------------------------…+
| foobar | CREATE TABLE `foobar` (
  `column_A` int(10) unsigned NOT NULL,
  `column_B` int(10) unsigned NOT NULL,
  PRIMARY KEY (`column_A`,`column_B`),
  KEY `column_B` (`column_B`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+--------+---------------------------…+