如果我在MySql中将列定义为主键,默认情况下它是否也是唯一键还是我还需要将其定义为唯一键(如果我希望它是唯一的)?
我看到这个问题What is the difference b/w Primary Key and Unique Key解释了两者之间的区别,但并没有完全回答我的问题。默认情况下PK是UK还是我需要明确定义它。
答案 0 :(得分:33)
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 |
+--------+---------------------------…+