Відмінності між "Унікальним ключем" та "Первинним ключем"


Відповіді:


20

Таблиця може мати щонайменше одне PRIMARY KEYобмеження, але вона може мати стільки, скільки ви хочете UNIQUE KEYобмежень.

Стовпці, що входять до складу PRIMARY KEYобов'язкових, повинні бути визначені як NOT NULL. Це не потрібно для стовпців, які є частиною UNIQUE KEYобмежень. Якщо стовпці не є нульовими, то різниці між унікальними та первинними ключами немає.

Ще одна незначна відмінність полягає в тому, що ви можете вибрати ім'я, яке потрібно для UNIQUE KEYобмеження (та індексу). З іншого боку, PRIMARY KEYмає ім'я за замовчуванням: PRIMARY.


5

Одна головна різниця

  • Первинний ключ вимикає нульові стовпці
  • Унікальний ключ дозволяє змінювати стовпчики

Інакше різниці немає ...


4

Щось ще не зазначили:

  • Якщо ви чітко не оголосите ПК в таблицях InnoDB, він створить його під обкладинками. Ви не можете отримати доступ, замовити чи фільтрувати за допомогою цього неявного ключа. Це має наслідки щодо ресурсів, оскільки кожен вторинний індекс містить покажчик копії на ПК рядка.

3

Найголовніша відмінність полягає в їх призначенні .

  • Первинний ключ : Мета первинного ключа - діяти як "КЛЮЧ". Первинний ключ - це ключ у реляційній базі даних, який використовується для ідентифікації записів.
  • Унікальний індекс : Унікальний індекс - це «INDEX», призначений для продуктивності. Оптимізатор знає, що для умови "де x =: x" в результаті буде лише один запис - тому він може підготувати відповідний для цього план.
  • Унікальне обмеження : це "CONSTRAINT", який гарантує відсутність дублікатів у цьому стовпчику. Це обмеження цілісності даних.

Окрім їх призначення, заслуговують на увагу наступні моменти.

  • Якщо не вказано інше, ПЕРШИЙ КЛЮЧ намагатиметься створити КЛАСТИРОВАНИЙ ІНДЕКС (Хоча ця справа стосується і SQL Server, як зазначено в коментарі)
  • На столі може бути лише один ПЕРШИЙ КЛЮЧ; але може бути багато унікальних обмежень та унікальних індексів
  • PRIMARY KEY завжди не є нульовим, але стовпці з унікальним обмеженням можуть містити NULL значення

1
Питання позначено тегом MySQL. Ви не можете вказати інше, якщо в таблиці використовується двигун InnoDB і є первинний ключ, то це кластерний індекс. Немає вибору. Можливо, ви думали про SQL Server.
ypercubeᵀᴹ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.