2012-02-08 136 views
12

我有一个基本的“用户”表,我想在MySQL中创建。UNIQUE,UNIQUE KEY和CONSTRAINT'name'UNIQUE之间有什么区别?

我不想重复的电子邮件或重复出现在数据库中的用户名。

  • 防止创建表格的最佳方法是什么?
  • 而这也正是以下区别:

UNIQUE(用户名), UNIQUE(电子邮件),

2. UNIQUE KEY(用户名), UNIQUE KEY(email),

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; 
+0

PS:对于邮件索引,通过将可能只会让事情更慢。电子邮件的唯一限制条件也可以作为普通索引。在电子邮件上选择最多只能返回1行,因此无需通过索引。 – 2012-02-08 21:38:33

回答

14

1和2是ide ntical - 同时创建两个唯一索引,每个索引一个索引。 #3只能在两个键上创建一个唯一的索引,因此不能复制用户名和电子邮件的组合,但例如,只要使用不同的电子邮件地址,就可以复制用户名。

听起来像是你可能想无论是前两个。 UNIQUE和UNIQUE KEY是相同的。

+0

完美,欢呼的信息! – leokennedy 2012-02-08 21:31:46

1

它们都是同义如由syntax documentation

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

在这种表示法(Wirth's notation)表示[]可选元素

+2

第三个是跨多个字段的复杂键,而不是两个不同的键。 – 2012-02-08 21:26:29

+0

确实......我没有注意到这个问题。 – Mchl 2012-02-08 21:27:36

+1

感谢您的链接,MySQL创建表语法现在开始变得更有意义。 – leokennedy 2012-02-08 21:32:44

相关问题