2013-08-23 4 views
2

У меня есть 2 уникальных значения под 1 таблицей в MySQL.В MySQL у UNIQUE varchar также должен быть PRIMARY KEY?

|id (PK)|varchar(255) UNIQUE| 
----------------------------- 
| 1 |  1234abcde | 
| 2 |  5678fghij | 
| 3 |  9012klmno | 

Должен ли я установить UNIQUE VARCHAR как ПК или я все еще могу использовать auto_incremented идентификатор (INT)? Это хорошая или плохая практика?

+0

'UNIQUE' просто отлично, нет необходимости в первичном ключе –

+0

В таблице может быть только один первичный ключ. –

+0

Предположим, что мне нужен первичный ключ для уникального varchar, это повлияет на мою производительность? если да, как я могу его измерить? – Tatarin

ответ

1

Нет, это не должен быть первичный ключ.

Кроме того: у вас не может быть более одного «первичного ключа» (отличного от составных первичных ключей), и часто имеет смысл иметь поле идентификатора auto-increment для соглашения в одиночку и для некоторых фреймворков (например, таких как Hibernate и ORM Entity Framework).

Чтобы ответить на второй вопрос, существует множество бизнес-ситуаций, в которых многие из вас применяют уникальное ограничение для нескольких столбцов, не делая их своим основным ключом - например, они могут быть уникальными, но вам может потребоваться редактировать/изменить их:

т.е.

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

Итак, дело в том, что это делается все время.

6

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

1

Нет, вам не обязательно. Если вы хотите обеспечить уникальность в своем столбце varchar, установите уникальное ограничение, но это не значит, что вам нужно сделать его ПК. Вы по-прежнему можете использовать числовой идентификатор с автоматическим добавлением в качестве основного ключа.

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

2

В одной таблице может быть несколько ключей. Один из них - «первичный» (PRIMARY KEY), а остальные - «чередующиеся» (УНИКАЛЬНОЕ ограничение).

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

+0

+1 для InnoDB pk, используемого для кластера, не знал этого. спасибо – Tatarin

Смежные вопросы