繁体   English   中英

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

[英]MySql - Is primary key unique by default?

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

我看到这个问题黑白主键和唯一键什么区别,它解释了两者之间的区别,但并没有完全回答我的问题。 默认情况下PK是英国还是我需要明确定义它。

主键在每个 SQL 中始终是唯一的 您不必将其明确定义为 UNIQUE。

附带说明:表中只能有一个主键,并且它永远不允许空值。 此外,表中只能有一个主键约束(因为创建主键的目的是唯一标识表中的行),但表中可以有多个唯一键约束。

例子:

以 EmpID 作为主键和 EmpPhoneNo 作为唯一键的员工详细信息表。

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

请注意,复合键可能会导致混淆:实际上主键可以是复合键,而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 |
+--------+---------------------------…+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM