Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL PRIMARY KEY срещу ограничения на UNIQUE

Като предисловие имайте предвид, че не е необходимо първичният ключ да бъде една колона:той може да се състои от множество колони:това е известно като съставен ключ. Също така имайте предвид, че не всяка таблица има AUTO_INCREMENT /IDENTITY колона изобщо и можете да имате UNIQUE ограничение върху една колона вътре в съставен ключ така или иначе.

  1. Няма такъв - но няма смисъл СУБД да забранява такова излишък или защото ще ви е необходима допълнителна логика и сложност, за да се справите с това условие, докато няма реална вреда от наличието и на двете (освен въздействието върху производителността от необходимостта да поддържате два индекса).

  2. Както казахме по-горе:защото алтернативната цена откриването и предотвратяването на това излишък не си струва.

Друго нещо, което трябва да имате предвид е, че дефиницията на първичен ключ на таблица не е неизменна и следователно подлежи на промяна. Една таблица може вече да има колони с UNIQUE настройка на ограничение и след това дизайнерът на базата данни решава да включи това в нова дефиниция на първичния ключ - би било неудобно за потребителя да се изисква първо да се премахне старото ограничение, особено ако други части от тяхната приложна система зависят от това УНИКАЛНО ограничение е налице (напр. 1:0..1 дефиниция на връзка).

(Също така, AUTO_INCREMENT не се включва взаимно с UNIQUE или PRIMARY KEY :можете да използвате AUTO_INCREMENT с неуникални колони (напр. ако AUTO_INCREMENT се добавя, след като таблица вече съдържа данни), и обратното PRIMARY KEY може да използва уникални стойности, получени от другаде, като например друга колона за самоличност като външен ключ (съставните първични ключове могат да съдържат външни ключове!) или "естествен" източник на данни, като например използване на номер на социално осигуряване в САЩ като първичен ключ (разбира се не трябва да никога направете това в действителност)).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на 'LIKE' с резултат от SQL подзаявка

  2. Създаване на mysql тригер чрез PHP?

  3. Немски умлаути в MYSQL INSERT

  4. Достъпът е отказан за потребител ''@'localhost' (използвайки парола:НЕ)

  5. Общият брой ключалки надвишава размера на таблицата за заключване