2012-02-08 140 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

相關問題