2012-02-08 17 views
12

Mam podstawową tabelę użytkowników, którą chcę utworzyć w MySQL.Jaka jest różnica między UNIQUE, UNIQUE KEY i CONSTRAINT 'name' UNIQUE?

Nie chcę duplikaty e-maili lub duplikat nazwy użytkowników pojawiające się w bazie danych.

  • Jaki jest najlepszy sposób zapobiegania temu przy tworzeniu tabeli?
  • A jaka jest różnica między:

1. UNIQUE (nazwa użytkownika), UNIQUE (e-mail),

2. UNIQUE KEY (nazwa użytkownika), unikalny klucz (e-mail), ucons

3. przymusu _login UNIQUE (nazwa użytkownika, adres e-mail),

Zakładam, niektóre z nich są synonimami, ale czytałem sprzecznych informacji w Internecie i szukał potwierdzenia.

Mam nadzieję, że ktoś może pomóc.

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: indeks wiadomości e-mail, hasło prawdopodobnie spowoduje tylko spowolnienie. Unikalne ograniczenie dotyczące wiadomości e-mail może również działać jako normalny indeks. Wybór wiadomości e-mail spowoduje powrót co najwyżej 1 wiersza, więc nie ma potrzeby indeksowania przebiegu. –

Odpowiedz

14

1 i 2 to ide ntical - oba tworzą dwa unikatowe indeksy, po jednym dla każdego klucza. # 3 tworzy tylko jeden unikalny indeks dla obu kluczy, więc nie można duplikować kombinacji nazwy użytkownika i adresu e-mail, ale na przykład nazwa użytkownika może być powielana tak długo, jak długo używany jest inny adres e-mail.

Brzmi prawdopodobnie chcesz jeden z dwóch pierwszych. UNIQUE i UNIQUE KEY są równoważne.

+0

Idealne, okrzyki za informacje! – leokennedy

1

są synonimami czym świadczy syntax documentation:

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

[] w tym zapisie (Wirth's notation) oznaczają alternatywne elementy

+2

Trzeci to złożony klucz w wielu polach, w przeciwieństwie do dwóch różnych kluczy. –

+0

Rzeczywiście ... Nie zauważyłem tego w pytaniu. – Mchl

+1

Dzięki za łącze składnia MySQL create table zaczyna nabierać teraz większego sensu. – leokennedy

Powiązane problemy