MySQL: is primary key unique by default?
Asked Answered
D

3

51

If I define a column as a primary key in MySQL, is it also unique key by default or do I need to also define it as unique key (in case I want it to be unique)?

I saw this question What is the difference b/w Primary Key and Unique Key that explain the difference between the two, but doesn't exactly answer my question.

Does PK is UK by default or I need to explicitly define it?

Daryl answered 18/6, 2015 at 9:43 Comment(3)
possible duplicate of What is the difference b/w Primary Key and Unique KeyJetton
@Jetton - I saw this question in the link, that explain the difference between the two but doesn't exactly answer my question. does PK is UK by default or I need to explicitly define it.Daryl
possible duplicate of difference between primary key and unique keySooksoon
W
73

Primary key is always unique in every SQL. You dont have to explicitly define it as UNIQUE.

On a side note: You can only have onePrimary key in a table and it never allows null values. Also you can have only one primary key constraint in the table(as the point of creating a primary key is to uniquely identify the row in your table) but you can more than one unique key constraint in your table.

Example:

An employee details table having EmpID as Primary key and EmpPhoneNo as unique key.

Washburn answered 18/6, 2015 at 9:45 Comment(4)
another point : a table can have only one PRIMARY KEY constraint but it can have as many as you want UNIQUE KEY constraintsEnvious
Actually there are more differences between unique and primary key, like primary key cannot be NULL. But that's not the question about.Ruttish
"On a side note: You can only have onePrimary key in a table" what about composite primary key?Kapok
It's still one Primary Key, @AraYeressian.Taken
R
9

Primary key is always unique by definition. Not only in MySQL. So you don't need any additional unique key.

Ruttish answered 18/6, 2015 at 9:45 Comment(0)
M
4

Note that composite keys may lead to confusion : indeed a primary key can be a composite key, and DESCRIBE will show all of the composite key components as primary keys :

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

However SHOW CREATE TABLE will show the reality :

> 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 |
+--------+---------------------------…+
Mccreary answered 24/8, 2019 at 22:28 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.