В чем разница между 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]
[]
в этой записи (запись вирта) обозначает необязательные элементы