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 |
+--------+---------------------------…+
如果我在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 |
+--------+---------------------------…+