2011-02-13 136 views
0
CREATE TABLE IF NOT EXISTS `users` (
    `id` int(11) NOT NULL auto_increment, 
    `username` varchar(50) NOT NULL, 
    `status` varchar(20) NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `username` (`username`) 
) 

请解释我什么是做UNIQUE KEY“用户名”(用户名“)在上面的例子声明,为什么(”用户名“)再次写的?MySQL表列说明需要帮助

+3

如果您的表中有“用户名”列,这会有所帮助。尝试执行此语句时,是否没有收到任何错误消息? – greg0ire 2011-02-13 15:49:11

回答

2

UNIQUE_KEY行正在'username'列上创建一个名为'username'的唯一索引。唯一的索引只允许一个记录具有特定的值。这对像用户名这样的行非常有用,因为它可以防止使用相同的用户名创建两个用户。

但是,如果您运行此操作,我认为您会得到一个错误,因为您尚未定义名为username的列。

CREATE TABLE IF NOT EXISTS `users` (
    `id` int(11) NOT NULL auto_increment, 
    `username` varchar(50) NOT NULL, 
    `status` varchar(20) NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `username` (`username`) 
) 
1

这只是MySQL的CREATE TABLE syntax预期的格式。如果你看一下详细的语法,你会看到...

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

换句话说,你使用它使用“用户名”字段/列“用户名”的INDEX_NAME。这听起来很奇怪,但如果你使用的是复合键,你可能有一个定义类似...

UNIQUE KEY duplicate_lock (user_email, user_name) 

...所以你必须定义不同的索引名和列部分。

+0

谢谢,但它对我来说不是什么东西是什么是index_name? – Narek 2011-02-13 16:03:41

+1

如果您想明确告诉MySQL要使用哪个索引,index_name是索引在查询中引用的名称。这通常在索引包含多个列并且查询相当复杂时完成。 – Wige 2011-02-13 16:14:16