What is the difference between UNIQUE, UNIQUE KEY

2020-08-09 06:20发布

I have a basic users table I want to create in MySQL.

I do not want duplicate emails or duplicate usernames appearing in the database.

  • What is the best way of preventing this upon table creation?
  • And what is the difference between the following:

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

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

3. CONSTRAINT ucons_login UNIQUE (username, email),

I assume some of these are synonymous, yet I've been reading conflicting information online and was seeking confirmation.

I hope someone can assist.

The 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条回答
Fickle 薄情
2楼-- · 2020-08-09 07:14

1 and 2 are identical - both create two unique indexes, one for each key. #3 only creates one unique index across both keys, so no combination of username and email can be duplicated, but for example, a username could be duplicated as long as a different email was used.

Sounds like you probably want either of the first two. UNIQUE and UNIQUE KEY are equivalent.

查看更多
一夜七次
3楼-- · 2020-08-09 07:19

They are all synonymous as evidenced by syntax documentation:

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

[] in this notation (Wirth's notation) denote optional elements

查看更多
登录 后发表回答