MySql - 默认情况下主键是唯一的吗?

时间:2015-06-18 09:43:37

标签: mysql primary-key unique-key

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

我看到这个问题What is the difference b/w Primary Key and Unique Key解释了两者之间的区别,但并没有完全回答我的问题。默认情况下PK是UK还是我需要明确定义它。

3 个答案:

答案 0 :(得分:33)

每个SQL中都有

Primary key is always unique。你不必明确地将它定义为UNIQUE。

旁注:您只能在表中拥有一个主键,并且它永远不会允许空值。此外,表中只能有一个主键约束(因为创建主键的关键是唯一标识表中的行),但表中可以有多个唯一键约束。

示例:

员工详细信息表,其中EmpID为主键,EmpPhoneNo为唯一键。

答案 1 :(得分:4)

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

答案 2 :(得分:2)

请注意,组合键可能会引起混乱:实际上,主键可以是组合键,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 |
+--------+---------------------------…+