2011-02-13 100 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