2012-02-08 17 views
12

私はMySQLで作成したい基本的な 'users'テーブルを持っています。UNIQUE、UNIQUE KEYとCONSTRAINT 'name' UNIQUEの違いは何ですか?

データベースに重複したメールや重複したユーザー名が表示されることはありません。

  • テーブル作成時にこれを防ぐ最良の方法は何ですか。
  • そして、何次の違いがある:

1. UNIQUE(ユーザー名)、 UNIQUE(電子メール)、

2. UNIQUE KEY(ユーザー名)、 ユニークキー(電子メール)、

CONSTRAINT ucons _login UNIQUE(username、email)、

私はこれらのいくつかは同義語だと思いますが、私は矛盾する情報をオンラインで読んでおり、確認を求めていました。

誰かが助けてくれることを願っています。

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行しか返されないため、パス上にインデックスを作成する必要はありません。 –

答えて

14

1を表し、及び2はideですntical - どちらもキーごとに1つずつ、2つのユニークなインデックスを作成します。 #3は両方のキーに1つの一意のインデックスを作成するだけなので、ユーザー名と電子メールの組み合わせは複製できませんが、別の電子メールが使用されていればユーザー名を複製できます。

おそらく最初の2つのいずれかが好きなようです。 UNIQUEとUNIQUE KEYは同等です。

+0

情報のための完全な、喝采! – leokennedy

1

彼らはsyntax documentationによって証明されるように全て同義である:この表記(Wirth's notation)で

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

[]は任意要素

+2

3つ目は、2つの異なるキーとは対照的に、複数のフィールドにわたる複雑なキーです。 –

+0

確かに...私はその問題に気付かなかった。 – Mchl

+1

リンクのおかげで、MySQLの作成テーブル構文がより意味をなさないようになっています。 – leokennedy

関連する問題