В чем разница между UNIQUE, UNIQUE KEY и CONSTRAINT 'name' UNIQUE?

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

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

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

1.  UNIQUE (username), UNIQUE (email),

2.  UNIQUE KEY (username), UNIQUE KEY (email),

3.  CONSTRAINT ucons_login UNIQUE (username, email),

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

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

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;

Ответ 1

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

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

Ответ 2

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

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

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