Разница между ключом, первичным ключом, уникальным ключом и индексом в MySQL


250

Когда я должен использовать KEY, PRIMARY KEY, UNIQUE KEYи INDEX?


2
ПЕРВИЧНЫЙ ключ предназначен для идентификации строк, не позволяет вставлять две строки с одинаковыми данными ... INDEX ключ для ускорения поиска (минимальная медленная вставка). УНИКАЛЬНЫЙ ключ для уникальных данных в столбце.
Hos Mercury


Ответы:


303

KEYи INDEXявляются синонимами в MySQL. Они имеют в виду одно и то же. В базах данных вы будете использовать индексы для повышения скорости поиска данных. Индекс обычно создается на колонках , используемых в JOIN, WHEREи ORDER BYоговорок.

Представьте, что у вас есть таблица с именем usersи вы хотите найти всех пользователей с фамилией «Смит». Без индекса база данных должна была бы пройти через все записи таблицы: это медленно, потому что чем больше записей в вашей базе данных, тем больше нужно сделать, чтобы найти результат. С другой стороны, индекс поможет базе данных быстро перейти к соответствующим страницам, где хранятся записи «Смита». Это очень похоже на то, как мы, люди, просматриваем каталог телефонной книги, чтобы найти кого-то по фамилии: мы не начинаем поиск по каталогу от обложки к обложке, пока мы вставляем информацию в некотором порядке, который мы можем используйте для быстрого перехода к страницам 'S'.

Первичные ключи и уникальные ключи похожи. Первичный ключ - это столбец или комбинация столбцов, которые могут однозначно идентифицировать строку. Это особый случай уникального ключа . Таблица может иметь не более одного первичного ключа, но более одного уникального ключа. Когда вы указываете уникальный ключ для столбца, никакие две отдельные строки в таблице не могут иметь одинаковое значение.

Также обратите внимание, что столбцы, определенные как первичные ключи или уникальные ключи, автоматически индексируются в MySQL.


2
можно иметь как уникальный ключ, так и первичный ключ с одинаковым значением?
ПОМОГИ

58
@needHELP: если у вас есть таблица passengersс полями (id, first_name, last_name, age, passport_number), указанными ниже: обычно вы устанавливаете idстолбец в качестве первичного ключа. Первичный ключ автоматически является уникальным ключом. Основное отличие состоит в том, что в таблице может быть только один первичный ключ, а столбец не может содержать NULLзначения. Там нет необходимости , чтобы настроить idколонку быть , UNIQUEпотому что, установив его на первичный ключ, он автоматически гарантирует уникальность ... Тогда вы могли бы также установить passport_numberна UNIQUEтак , что не более чем один пассажир ...
Daniel Vassallo

32
... будет иметь тот же номер паспорта. Однако у вас могут быть пассажиры (например, дети) без номера паспорта. В этом случае вы можете вставить NULLв этот столбец, без проблем.
Даниэль Вассалло

2
@DanielVassallo Мне нравится, как вы очищаете его от синонимов, используемых MySQL.
SIFE

1
Одно из лучших объяснений. Большое спасибо :-)
Рави Хирани

61

KEY и INDEX являются синонимами.

Вы должны добавить индекс, когда измерения производительности и EXPLAIN показывают, что запрос неэффективен из-за отсутствия индекса. Добавление индекса может повысить производительность запросов (но может замедлить изменения в таблице).

Вы должны использовать UNIQUE, если хотите, чтобы значения в этом столбце (или столбцах) были уникальными, чтобы при попытке вставить повторяющиеся значения возникла ошибка.

ПЕРВИЧНЫЙ КЛЮЧ является одновременно уникальным ограничением, а также подразумевает, что столбец НЕ НЕДЕЙСТВИТЕЛЕН. Он используется для идентификации каждого ряда. Это может быть полезно для объединения с другой таблицей через ограничение внешнего ключа. Хотя для таблицы необязательно иметь ПЕРВИЧНЫЙ КЛЮЧ, обычно это хорошая идея.


ПЕРВИЧНЫЙ КЛЮЧ используется для идентификации каждого ряда? объясни извините за мое невежество.
ПОМОГИ

@needHELP: используется для уникальной идентификации любой строки в вашей таблице. Например, если вы хотите удалить конкретную строку в вашей таблице, полезно иметь какой-то способ однозначно идентифицировать ее, чтобы случайно не удалить неправильную строку. Это также полезно для объединения с другой таблицей, так как она проиндексирована.
Марк Байерс

48

Первичный ключ не позволяет NULLзначения, но уникальный ключ позволяет NULLзначения.

Мы можем объявить только один первичный ключ в таблице, но таблица может иметь несколько уникальных ключей (назначение столбцов).


17

PRIMARY KEYИ UNIQUE KEYпохожи, за исключением того, что он имеет разные функции. Первичный ключ делает строку таблицы уникальной (т. Е. Не может быть двух строк с одинаковым ключом). Вы можете иметь только 1 первичный ключ в таблице базы данных.

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

INDEXтакже создает уникальность. MySQL (пример) создаст таблицу индексации для столбца, который индексируется. Таким образом, легче получить значение строки таблицы, когда запрос запрашивается в этом столбце индексированной таблицы. Недостатком является то, что если вы делаете много обновлений / удалений / создания, MySQL должен управлять таблицами индексации (и это может быть узким местом производительности).

Надеюсь это поможет.


Также UNIQUE KEYможет быть, NULLно PRIMARY KEYне может быть NULL.
Рафаи

10

Уникальные ключи: столбцы, в которых нет двух одинаковых строк

Первичный ключ: коллекция минимального количества столбцов, которые могут однозначно идентифицировать каждую строку в таблице (т. Е. Никакие две строки не похожи во всех столбцах, составляющих первичный ключ). В таблице может быть несколько первичных ключей. Если существует уникальный ключ, то это первичный ключ (а не первичный ключ) в таблице. Если уникального ключа не существует, то потребуется несколько значений столбца, чтобы идентифицировать строку, например (first_name, last_name, Father_name, mother_name), которые в некоторых таблицах могут представлять собой первичный ключ.

Индекс: используется для оптимизации запросов. Если вы собираетесь искать или сортировать результаты на основе какого-либо столбца много раз (например, в основном люди будут искать учащихся по имени, а не по номеру броска), то это можно оптимизировать, если все значения столбца равны " индексируется, например, с помощью алгоритма двоичного дерева.


Я думаю, что вы хотели сказать, что в таблице может быть только один ПК
Răzvan Flavius ​​Panda

7

Первичный ключ - мы можем поместить только один первичный ключ таблицы в таблицу, и мы не можем оставить этот столбец пустым, когда вводим значения в таблицу.

Уникальный ключ - мы можем поместить более одного уникального ключа в таблицу, и мы можем оставить этот столбец пустым, когда вводим значения в таблицу. столбец принимает уникальные значения (не одинаковые), когда мы применили первичный и уникальный ключ.


таблица имеет только один ПЕРВИЧНЫЙ КЛЮЧ, но уникальных ключей больше, чем один.
ВИКАШ

6

Первичный ключ используется для работы с разными таблицами. Это основа реляционных баз данных. Если у вас есть база данных книг, лучше создать 2 таблицы - 1) книги и 2) авторов с первичным ключом INT «id». Тогда вы используете идентификатор в книгах вместо имени автора.

Уникальный ключ используется, если вы не хотите иметь повторяющиеся записи. Например, вы можете иметь заголовок в таблице книг и хотите быть уверенным, что для каждого заголовка есть только одна запись.


2

Уникальный ключ:

  1. Более одного значения может быть нулевым.
  2. Никакие два кортежа не могут иметь одинаковые значения в уникальном ключе.
  3. Один или несколько уникальных ключей могут быть объединены в первичный ключ, но не наоборот.

Основной ключ

  1. Может содержать более одного уникального ключа.
  2. Уникально представляет кортеж.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.