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