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


250

Коли я повинен використовувати KEY, PRIMARY KEY, UNIQUE KEYі INDEX?


2
ПЕРШИЧНА клавіша призначена для ідентифікації рядків, запобігання вставці двох рядків з однаковими даними ... Ключ INDEX призначений для прискорення пошуку (мінімальне уповільнення вставки). Унікальний ключ для унікальних даних у стовпці.
Hos Mercury


Відповіді:


303

KEYі INDEXє синонімами в MySQL. Вони означають те саме. У базах даних ви б використовували індекси для покращення швидкості пошуку даних. Індекс зазвичай створюється на колонках , які використовуються в JOIN, WHEREі ORDER BYзастережень.

Уявіть, що у вас є таблиця з назвою, usersі ви хочете шукати всіх користувачів, які мають прізвище "Smith". Без індексу базі даних доведеться пройти всі записи таблиці: це повільно, адже чим більше записів у вашій базі даних, тим більше роботи потрібно зробити, щоб знайти результат. З іншого боку, індекс допоможе базі даних швидко перейти на відповідні сторінки, де зберігаються записи "Сміта". Це дуже схоже на те, як ми, люди, проходимо через каталог телефонної книги, щоб знайти когось за прізвищем: Ми не починаємо пошук у каталозі від обкладинки до обкладинки, доки ми вставляємо інформацію в порядку, який ми можемо використовуйте для швидкого переходу на сторінки "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, коли ви хочете зіставити значення в цьому стовпці (або стовпцях), щоб бути унікальними, так що спроби вставити повторювані значення призводять до помилки.

ПЕРШИЙ КЛЮЧ - це і унікальне обмеження, і це також означає, що стовпець НЕ НУЛЬНИЙ. Він використовується для надання особі кожному рядку. Це може бути корисно для з'єднання з іншою таблицею через обмеження зовнішнього ключа. Хоча для таблиці не потрібно мати ПЕРШИЙ КЛЮЧ, зазвичай це хороша ідея.


PRIMARY KEY використовується для надання особі кожному рядку? поясніть вибачення за моє незнання.
ДОПОМОГА

@needHELP: Він використовується як спосіб однозначно визначити будь-який рядок таблиці. Наприклад, якщо ви хочете видалити певну рядок із таблиці, корисно мати певний спосіб однозначно визначити її, щоб випадково не видалити неправильний рядок. Це також корисно для приєднання до іншої таблиці, оскільки вона індексується.
Марк Байєрс

48

Первинний ключ не дозволяє NULLзначення, але унікальний ключ дозволяє NULLзначення.

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


17

PRIMARY KEYІ UNIQUE KEYсхожі, за винятком того, що він має різні функції. Первинний ключ робить рядок таблиці унікальним (тобто не може бути 2 ряду з точно такою ж клавішею). У таблиці бази даних може бути лише 1 первинний ключ.

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

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

Сподіваюсь, це допомагає.


Також UNIQUE KEYможе бути, NULLале PRIMARY KEYне може бути NULL.
Рафай

10

Унікальні ключі: стовпці, в яких немає двох рядків, схожі

Первинний ключ: Колекція мінімальної кількості стовпців, яка може однозначно ідентифікувати кожен рядок таблиці (тобто жодні два рядки не схожі у всіх стовпцях, що складають первинний ключ). У таблиці може бути більше одного первинного ключа. Якщо існує унікальний ключ, то це первинний ключ (а не "первинний ключ"). Якщо не існує унікального ключа, то для ідентифікації такого рядка потрібно буде більше одного значення стовпця (ім'я, прізвище, ім'я батька, ім'я матері), яке може містити в деяких таблицях первинний ключ.

Індекс: використовується для оптимізації запитів. Якщо ви збираєтеся шукати або сортувати результати на основі якогось стовпця багато разів (наприклад, в основному люди збираються шукати учнів за іменем, а не за їх роликом. індексується ", наприклад, з алгоритмом двійкового дерева.


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

7

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

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


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

6

Первинний ключ використовується для роботи з різними таблицями. Це основа реляційних баз даних. Якщо у вас є база даних книг, краще створити 2 таблиці - 1) книги та 2) авторів з первинним ключем INT "id". Тоді ви використовуєте id у книгах замість імені авторів.

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


2

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

  1. Більше одного значення може бути нульовим.
  2. Жоден два кортежі не можуть мати однакові значення в унікальному ключі.
  3. Один або кілька унікальних клавіш можна комбінувати для формування основного ключа, але не навпаки.

Первинний ключ

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