Подтвердить что ты не робот

MySql - по умолчанию ли первичный ключ уникален?

Если я определяю столбец как первичный ключ в MySql, это также уникальный ключ по умолчанию или мне нужно также определить его как уникальный ключ (в случае, если я хочу, чтобы он был уникальным)?

Я видел этот вопрос В чем разница между основным ключом и уникальным ключом v/w, который объясняет разницу между ними, но точно не отвечает на мой вопрос. По умолчанию PK является Великобританией, или мне нужно явно определить его.

4b9b3361

Ответ 1

Первичный ключ всегда уникален в каждом SQL. Вам не нужно явно определять его как UNIQUE.

На стороне примечания: В таблице может быть только один первичный ключ, и он никогда не допускает нулевые значения. Кроме того, в таблице может быть только одно ограничение первичного ключа (поскольку точкой создания первичного ключа является уникальная идентификация строки в вашей таблице), но в вашей таблице может быть несколько уникальных ограничений ключа.

Пример:

Таблица сведений о сотрудниках, имеющих EmpID в качестве основного ключа и EmpPhoneNo как уникальный ключ.

Ответ 2

Первичный ключ всегда уникален по определению. Не только в MySQL. Таким образом, вам не нужен дополнительный уникальный ключ.

Ответ 3

Обратите внимание, что составные ключи могут привести к путанице: действительно, первичный ключ может быть составным ключом, и 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 |
+--------+---------------------------…+