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

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

Кто-то спросил меня этот вопрос на собеседовании...

4b9b3361

Ответ 1

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

Уникальное ограничение просто означает, что конкретное поле должно быть уникальным.

Ответ 2

Первичные ключи не могут быть пустыми. Уникальные клавиши могут.

Ответ 3

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

Ответ 4

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

Скажите, что у вас есть таблица Employees, PK EmployeeID. Например, вы можете добавить уникальное ограничение на SSN.

Ответ 5

Уникальные ограничения клавиш:

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

    ALTER TABLE имя_таблицы ADD CONSTRAINT UNIQUE_CONSTRAINT UNIQUE (column_name1, column_name2,...)

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

  • Основной ключ создаст уникальную уникальность столбцов в таблице.
  • Основной ключ будет создавать кластерный индекс по умолчанию.
  • Для таблицы можно создать только один ключ Primay.
  • Несколько столбцов можно объединить, чтобы сформировать один первичный ключ
  • Он не допускает нулевые значения.

    ALTER TABLE имя_таблицы ADD CONSTRAINT KEY_CONSTRAINT ПЕРВИЧНЫЙ КЛЮЧ (column_name)

Ответ 6

TL; DR Многое может быть подразумевается PRIMARY KEY (уникальность, ссылочная, ненулевая, кластеризация и т.д.), но ничего, что нельзя явно указать с помощью UNIQUE.

Я предлагаю, чтобы, если вы такой кодер, который любит удобство SELECT * FROM..., не имея необходимости перечислять все эти надоедливые столбцы, тогда PRIMARY KEY - это только то, что вам нужно.


у relvar может быть несколько ключей, но мы выбираем только один для подчеркивания и назовите это первичным ключом. Выбор произволен, поэтому концепция первичного не очень важна с логической точки зрения. Однако общая концепция ключа очень важна! термин ключ-кандидат означает точно такое же, как ключ (то есть добавление кандидата не имеет реального значения - он был предложен Тедом Коддом потому что он рассматривал каждый ключ в качестве кандидата на назначение в качестве первичный ключ)... SQL позволяет подмножество столбцов таблицы объявленный как ключ для этой таблицы. Это также позволяет одному из них быть назначенный в качестве первичного ключа. Указание ключа, который будет для определенного удобства в связи с другими ограничения, которые могут потребоваться

Что такое ключ? Хью Дарвен


обычно... выделить один ключ как первичный ключ (и любой другой ключи для рассматриваемого relvar, как говорят, являются альтернативными ключами). Но следует ли выбрать какой-то ключ как первичный, и если да, то какой, являются по существу психологическими проблемами, выходящими за рамки реляционной модели как таковой. Что касается хорошей практики, то большинство базовых Вероятно, relvars должен иметь первичный ключ, но, повторяя это правило, если это правило, на самом деле не является реляционной проблемой как таковой... Сильный рекомендация [для пользователей SQL]: для базовых таблиц, во всяком случае, используйте PRIMARY KEY и/или UNIQUE, чтобы гарантировать, что каждый такой таблица имеет хотя бы один ключ.

SQL и реляционная теория: как написать точный код SQL По С. J. Дата

В стандартном SQL PRIMARY KEY

  • подразумевает уникальность, но вы можете указать это явно (используя UNIQUE).
  • подразумевает NOT NULL, но вы можете указать это явно при создании столбцов (но вы должны избегать нулей!)
  • позволяет опустить столбцы в FOREIGN KEY, но вы можете явно указать их.
  • может быть объявлен только для одного ключа в таблице, но непонятно, почему (Codd, который первоначально предложил концепцию, не налагал такого ограничения).

В некоторых продуктах PRIMARY KEY подразумевается табличный кластеризованный индекс, но вы можете указать это явно (вы можете не захотеть, чтобы первичный ключ был кластеризованным индексом!)

Для некоторых людей PRIMARY KEY имеет чисто психологическое значение:

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

Ограничение уникальности - это именно то, на что это похоже.

Ответ 10

Ограничение UNIQUE однозначно идентифицирует каждую запись в таблице базы данных.

Ограничения UNIQUE и PRIMARY KEY гарантируют уникальность столбца или набора столбцов.

Ограничение PRIMARY KEY автоматически определяет ограничение UNIQUE.

Обратите внимание, что у вас может быть множество ограничений UNIQUE для каждой таблицы, но только одно ограничение PRIMARY KEY для таблицы

Ответ 11

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

Ответ 12

Первичные ключи по существу представляют собой комбинацию (уникальный + не пустой). также при ссылке на внешний ключ rdbms требует Первичный ключ.

Уникальный ключ просто налагает уникальность столбца. Значение поля может быть NULL в случае ключа uniqe. Также он не может использоваться для ссылки на внешний ключ, что совершенно очевидно, так как u может иметь в нем нулевые значения.

Ответ 13

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

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

Я знаю, что один, возможно, и больше форматов таблицы MySql также поддерживает кластеризованное индексирование, что означает то же самое, что и в SQL Server... он определяет порядок физических строк на диске.

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

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

Ответ 14

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

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

Ответ 15

В большом количестве ответов здесь обсуждались свойства PK и уникальные ограничения. Но важно понять разницу в концепции.

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

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

Becuase PK - это идентификатор записи, вы никогда не сможете изменить значение первичного ключа.

Ответ 16

create table a1 (id int,name varchar(20),city varchar(20),state varchar(20),country varchar(28) constraint pk_a1 primary key(id));
insert into a1 values(101,'sohan','gkp','up','india');


create table a1 (id int primary key,name varchar(20),city varchar(20),state varchar(20),country varchar(28));
insert into a1 values(101,'sohan','gkp','up','india');

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