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


252

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

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


9
WRT NULL способность хороший способ различить ч / б их PRIMARY KEY = UNIQUE KEY + Not Null CONSTRAINT
KNU

Ответы:


233

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

  • В таблице может быть только один первичный ключ
  • В некоторых СУБД этого не может быть NULL- например, MySQL добавляетNOT NULL
  • Первичный ключ - это уникальный идентификатор ключа записи

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

  • Может быть более одного уникального ключа в одной таблице
  • Уникальный ключ может иметь NULLзначения
  • Это может быть ключ-кандидат
  • Уникальный ключ может быть NULL; несколько строк могут иметь NULLзначения и, следовательно, не могут считаться «уникальными»

11
Также хочу добавить, что первичный ключ может быть создан на нескольких столбцах, например, первичный ключ (CustomerID, ProductID). Это называется составным первичным ключом. Это должно прояснить первый пункт, поскольку он может быть принят как есть (прочитайте один ключ => один столбец) новичком в sql:)
ken

1
Что означает «может быть ключом кандидата»?

1
«допускается только один ноль» - это не так, по крайней мере, для MySQL.
Янис Элмерис

69
Уникальный ключ может быть пустым и не может быть уникальными Средств ??
Пратик

20
@PratikCJoshi Он, вероятно, означает, что может быть несколько строк с нулем на в противном случае уникальный ключ.
Джон

77

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

Первичный ключ (PK) : это также столбец или группа столбцов, которые могут идентифицировать уникальность в строке.

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

По умолчанию:

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

Это действительно зависит от вашей цели при принятии решения о создании Великобритании или ПК. Это следует из аналогии типа «Если есть команда из трех человек, значит, все они равные, но будет один из них, который будет парой равных: PK и Великобритания имеют аналогичные отношения». Я бы предложил прочитать эту статью: пример, приведенный автором, может показаться неуместным, но постарайтесь получить общее представление.

http://tsqltips.blogspot.com/2012/06/difference-between-unique-key-and.html


Прочитайте около 10 веб-страниц, которые говорят, что PK может содержать более одного столбца. Тогда как может быть один и только один ПК на столе?

@android ПК с более чем одним столбцом действует как один столбец по отношению к уникальности. По крайней мере, в PostgreSQL это означает, что [table_name]_pkeyв таблицу добавлен новый столбец (с именем по умолчанию ) (я слышал, это называется суррогатным ключом). Источник: postgresqltutorial.com/postgresql-primary-key Я новичок во всем этом, поэтому я был бы признателен за более знающий плакат, чтобы указать на нюансы, которые я пропустил.
Пойк

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

46

Для организации или бизнеса существует так много физических объектов (таких как люди, ресурсы, машины и т. Д.) И виртуальных объектов (их задачи, транзакции, действия). Как правило, бизнес должен записывать и обрабатывать информацию об этих бизнес-объектах. Эти бизнес-объекты идентифицируются в рамках всего бизнес-домена с помощью ключа.

В соответствии с перспективой СУБД, ключ (он же ключ-кандидат) представляет собой значение или набор значений, которые однозначно идентифицируют объект.

Для таблицы DB существует так много ключей, которые могут иметь первичный ключ. Таким образом, все ключи, первичный ключ, уникальный ключ и т. Д. Вместе называются ключом-кандидатом. Однако администратор базы данных, выбравший ключ из ключа-кандидата для поиска записей, называется Первичным ключом.

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

1. Поведение: первичный ключ используется для идентификации строки (записи) в таблице, тогда как уникальный ключ предназначен для предотвращения дублирования значений в столбце (за исключением пустой записи).

2. Индексация: по умолчанию SQL-движок создает кластерный индекс по первичному ключу, если он не существует, и некластеризованный индекс по уникальному ключу.

3. Обнуляемость: Первичный ключ не содержит нулевых значений, тогда как Уникальный ключ может.

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

5. Модифицируемость: Вы не можете изменять или удалять первичные значения, но значения уникального ключа могут.

Для получения дополнительной информации и примеров:

http://dotnetauthorities.blogspot.in/2013/11/Microsoft-SQL-Server-Training-Online-Learning-Classes-Integrity-Constraints-PrimaryKey-Unique-Key_27.html


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

3
@Kapil делает это лучше, чем использование первичного ключа.
Gokigooooks

2
кластеризованный индекс: строки хранятся на диске физически в том же порядке, что и индекс
Duy Đặng

26

Первичный ключ должен быть уникальным.

Уникальный ключ не должен быть первичным ключом - см. Ключ-кандидат .

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


17

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

+-----------------------------------------+-----------------------------------------------+
|                Primary Key              |                    Unique Key                 |
+-----------------------------------------+-----------------------------------------------+
| Primary Key can't accept null values.   | Unique key can accept only one null value.    |
+-----------------------------------------+-----------------------------------------------+
| By default, Primary key is clustered    | By default, Unique key is a unique            |
| index and data in the database table is | non-clustered index.                          |
| physically organized in the sequence of |                                               |
| clustered index.                        |                                               |
+-----------------------------------------+-----------------------------------------------+
| We can have only one Primary key in a   | We can have more than one unique key in a     |
| table.                                  | table.                                        |
+-----------------------------------------+-----------------------------------------------+
| Primary key can be made foreign key     | In SQL Server, Unique key can be made foreign |
| into another table.                     | key into another table.                       |
+-----------------------------------------+-----------------------------------------------+

Вы можете найти подробную информацию по адресу :
http://www.dotnet-tricks.com/Tutorial/sqlserver/V2bS260912-Difference-between-Primary-Key-and-Unique-Key.html


16

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

Также по той же причине первичный ключ не может быть NULL (по крайней мере, в Oracle, не уверен насчет других баз данных)

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

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

Уникальные ключи, с другой стороны, могут меняться столько, сколько вы хотите.


22
+1 за упоминание риска вечного проклятия. Пришло время ввести теологию в теорию реляционных баз данных.
Невилл Кайт

PK также не может быть NULL в SQL Server
mrd3650

7

Первичный ключ - это уникальный ключ.

Каждая таблица должна содержать не более ОДНОГО первичного ключа, но может иметь несколько уникальных ключей. Первичный ключ используется для уникальной идентификации строки таблицы. Первичный ключ не может быть, NULLтак NULLкак не является значением.


6
  • Думайте, что имя таблицы - занятый.
  • Основной ключ
  • Первичный ключ не может принимать нулевые значения. Первичный ключ обеспечивает уникальность столбца. Мы можем иметь только один первичный ключ в таблице.
  • Уникальный ключ
  • Уникальный ключ может принимать нулевые значения. уникальный ключ также обеспечивает уникальность столбца. Вы можете подумать, если уникальный ключ содержит нулевые значения, то почему он может быть уникальным? да, хотя он может принимать нулевые значения, он обеспечивает уникальность столбца. просто посмотрите на картинку. Здесь Emp_ID является первичным, а Citizen ID уникальным. Надеюсь, вы понимаете. Мы можем использовать несколько уникальных ключей в таблице. введите описание изображения здесь

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

@ mahedi-hasan Разве в столбце уникальных ключей должно быть только одно значение NULL? Почему последние две строки в Citizen ID NULL? Я что-то здесь упускаю?
сверхновая

Только что получил ответ на свой комментарий выше. Похоже, что MySQL позволяет использовать несколько NULL в уникальном, так что похоже на то, что @Mahedi_Hasan использовал MySQL. stackoverflow.com/questions/3712222/…
сверхновая

6

Я знаю, что этому вопросу уже несколько лет, но я хотел бы дать ответ на него, объясняя, почему, а не как

Назначение первичного ключа : уникальная идентификация строки в базе данных => строка представляет отдельный экземпляр типа сущности, смоделированный таблицей. Первичный ключ обеспечивает целостность объекта, AKA Entity Integrity. Первичный ключ будет кластеризованным индексом, т.е. он определяет порядок, в котором данные физически хранятся в таблице.

Назначение уникального ключа : Хорошо, с помощью первичного ключа у нас есть способ уникальной идентификации строки. Но у меня есть такая потребность в бизнесе, чтобы другой столбец / набор столбцов имели уникальные значения. Технически, учитывая, что этот столбец (столбцы) уникален, он может быть кандидатом для обеспечения целостности объекта. Но, насколько нам известно, этот столбец может содержать данные, поступающие из сторонней организации, в которых у меня могут возникнуть сомнения относительно уникальности. Я не могу доверять этому, чтобы обеспечить целостность объекта. Я просто делаю это уникальным ключом для выполнения моих бизнес-требований.

Вот и вы!


1

Если ваш дизайн базы данных таков, что им не нужен внешний ключ, то вы можете использовать уникальный ключ ( но помните, что уникальный ключ допускает одно нулевое значение ).

Если ваша база данных требует внешнего ключа, то вы оставляете без выбора, вы должны идти с первичным ключом.

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


1

Уникальный ключ: - Его следует использовать, когда необходимо указать уникальное значение. В случае уникального ключа это также означает, что допускаются также нулевые значения. Уникальные ключи - это те ключи, которые уникальны и не похожи в этом столбце, как, например, имя вашего питомца. .it может быть ничем не похожим на null, и если вы спрашиваете в контексте базы данных, то следует отметить, что каждый null отличается от другого null в базе данных. EXCEPT-SQL Server, где значение null = null равно true


первичный ключ: - Его следует использовать, когда нужно дать уникальную идентификацию строки. Первичным является ключ, который уникален для каждой строки в ограничении базы данных, состоит в том, что он не допускает пустое значение в нем. Поэтому вы могли видеть, что база данных есть столбец с автоматическим приращением, и это первичный ключ таблицы. Кроме того, его можно использовать в качестве внешнего ключа в другой таблице. Например, можно указать orderId в таблице заказов , billId в таблице счетов .

Теперь возвращаемся к ситуации, когда его использовать: -

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

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


1

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

Оба Primary keyи Unique Keyиспользуются для однозначного определения строки в таблице. Primary Keyсоздает clustered indexстолбца, а Unique creates an unclustered index of the column.

A Primary Keyне позволяет NULL value, однако a Unique Keyпозволяет one NULL value.


0

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


msgstr "уникальный может быть нулевым и не может быть уникальным". Что may not be uniqueзначит здесь?
Юсуф Хасан

0

Основные ключи

Основное назначение первичного ключа - предоставить средства для идентификации каждой записи в таблице.

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

Первичный ключ имеет следующие характеристики:

  1. Для таблицы может быть только один первичный ключ.
  2. Первичный ключ состоит из одного или нескольких столбцов.
  3. Первичный ключ обеспечивает целостность сущности таблицы.
  4. Все определенные столбцы должны быть определены как NOT NULL.
  5. Первичный ключ однозначно идентифицирует строку.
  6. Первичные ключи приводят к КЛАСТЕРНЫМ уникальным индексам по умолчанию.

Уникальные ключи

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

Разве мы уже не делаем это с первичным ключом? Да, мы делаем, но таблица может иметь несколько наборов столбцов, которые вы хотите уникальные.

В SQL Server уникальный ключ имеет следующие характеристики:

  1. В таблице может быть несколько уникальных ключей.
  2. Уникальные ключи по умолчанию приводят к НЕКЛАСТЕРНЫМ уникальным индексам.
  3. Один или несколько столбцов составляют уникальный ключ.
  4. Столбец может быть NULL, но допускается по одному NULL на столбец.
  5. На ограничение уникальности может ссылаться ограничение внешнего ключа.

источник: здесь


0

Основные функции первичного ключа:

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

Основные особенности уникального ключа:

Он также может содержать уникальное значение для каждой строки данных.

Он также может содержать нулевые значения.

Несколько уникальных ключей в таблице.

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