В чем разница между UNIQUE, UNIQUE KEY и CONSTRAINT 'name' UNIQUE? - PullRequest
17 голосов
/ 09 февраля 2012

У меня есть базовая таблица «пользователей», которую я хочу создать в MySQL.

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

  • Как лучше всего предотвратить это при создании таблицы?
  • А в чем разница между:

1. UNIQUE (имя пользователя), UNIQUE (электронная почта),

2. УНИКАЛЬНЫЙ КЛЮЧ (имя пользователя), УНИКАЛЬНЫЙ КЛЮЧ (электронная почта),

3. CONSTRAINT ucons_login UNIQUE (имя пользователя, адрес электронной почты),

Я предполагаю, что некоторые из них являются синонимами, но я читал противоречивую информацию в Интернете и искал подтверждение.

Я надеюсь, что кто-то может помочь.

SQL:

CREATE TABLE users (
user_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
username VARCHAR(30) NOT NULL,
pass CHAR(40) NOT NULL,
first_name VARCHAR(20) NOT NULL,
last_name VARCHAR(40) NOT NULL,
email VARCHAR(60) NOT NULL,
registration_date DATETIME NOT NULL,
user_level TINYINT(1) UNSIGNED NOT NULL DEFAULT 0,
active CHAR(32),
PRIMARY KEY (user_id),
UNIQUE (username),
UNIQUE (email),
INDEX login (email, pass),
INDEX full_name (last_name, first_name)
) ENGINE=INNODB;

Ответы [ 2 ]

15 голосов
/ 09 февраля 2012

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

Звучит так, как будто вы, вероятно,хочу любой из первых двух.UNIQUE и UNIQUE KEY эквивалентны.

1 голос
/ 09 февраля 2012

Все они являются синонимами, о чем свидетельствует синтаксическая документация :

[CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...) [index_option]

[] в этой записи ( запись Вирта )обозначим необязательные элементы

...