Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > тип UNIQUE и PRIMARY


Автор: Sergio 28.6.2007, 22:14
Здраствуйте. Узучаю БД. Наталкнулся на два интересных типа: UNIQUE и PRIMARY
PRIMARY тип нужен для ключей. Тоесть он отвечает за индивидуальность каждого значения. 
А что за тип  UNIQUE?
Зарание спасибо.

Автор: Fin 28.6.2007, 22:57
Цитата

unique

unique
      1> единственный в своем роде, уникальный
   _Ex:
       unique feature _тех. особенность конструкции (данной модели)
   _Ex:
       perhaps a unique survival возможно, единственный оставшийся
       в живых
   _Ex:
       this pictire is thought to be unique эта картина считается
       уникальной
      2> особенный
   _Ex:
       unique opportunity исключительная возможность
   _Ex:
       to possess unique ability in smth. обладать необычайными
       способностями к чему-л.
      3> _разг. необыкновенный, странный, удивительный
   _Ex:
       she dressed in a most unique fashion она одевалась
       необыкновенно эксцентрично

Т.е. в этом поле не будет повторов значений.

Автор: Sergio 28.6.2007, 23:04
Fin, а что с типом PRIMARY значение может повторятся?

Автор: Fin 29.6.2007, 00:11
PRIMARY KEY - Uniquely identifies each row - ensures that users do not enter duplicate values and that an index is created to enhance performance. Null value are not allowed.

UNIQUE - Prevents duplication of alternate (non-primary) keys and ensures that an index is created to enhance performance. Null values are allowed.

Это определения из книжки по MS SQL 2005.

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

Добавлено через 3 минуты и 55 секунд
PS Т.е. поле на которое ставится первичный ключ уникально в таблице. Тем самым достигается уникальность всей строки в целом.

Автор: sTa1kEr 29.6.2007, 00:29
Хотел бы заметить, что UNIQUE не просто делает поля уникальными, он так же является индексом, что не менее важно.

Автор: sergejzr 29.6.2007, 00:38
Primary на таблицу всегда один, а UNIQUE полей может быть много разных.

пример:
Таблица "фото-альбом"

Номер фотографии(Primary key) | Название| Порядковый номер (UNIQUE) |

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

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


Автор: Fin 29.6.2007, 00:50
Когда то у меня была таблица с банковскими реквизитами с следуюшими полями: AccID, AccountNumber, BankID, Description. 
AccID это был Primary Key. Unique key ставился сразу на два поля AccountNumber и BankID. Получается, номер счета может встречаться дважды, Индефикатор банка тоже. Но дубль сочитания сразу двух полей не может иметь место в таблице.

Автор: muzer 29.6.2007, 01:02
Согласен со всеми ответами и всё же никто так открыто и не сказал - в MySQL Primary и Unique - это по сути одно и то же за исключением рюшечек - PRIMARY только один на таблицу, без доп названия, не допускает NULL'ы.
Но вообще, первоначальная идея, насколько я знаю, первичного ключа заключается в том, что именно _данные_ лежат на диске в отсортированном виде в соответствии со значением первичного ключа. В MySQL это не так.

Автор: sTa1kEr 29.6.2007, 01:22
Цитата(muzer @  29.6.2007,  01:02 Найти цитируемый пост)
Но вообще, первоначальная идея, насколько я знаю, первичного ключа заключается в том, что именно _данные_ лежат на диске в отсортированном виде в соответствии со значением первичного ключа. В MySQL это не так.

А как на счет таблиц InnoDB ?

Автор: muzer 29.6.2007, 11:30
sTa1kEr, согласен, хорошее замечание, InnoDB сортирует данные по ключу. Правда они его не называют первичным, а называют "clustered", и им может быть как PRIMARY так и UNIQUE (если объявлен на NOT NULL столбец), так и вообще собственный счётчик строк (то есть разницы между PRIMARY и UNIQUE опять же почти нет, приоритет у PRIMARY больше оказаться clustered ключом).

Автор: vicod 10.12.2011, 15:35
господа,
в чем разница между UNIQUE и UNIQUE KEY?

Автор: Zloxa 12.12.2011, 09:13
 smile 

primary key = unique + not null

Цитата(vicod @  10.12.2011,  15:35 Найти цитируемый пост)
в чем разница

ее нет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)