2012-02-08 13 views
12

Ho una tabella "utenti" di base che voglio creare in MySQL.Qual è la differenza tra UNIQUE, UNIQUE KEY e CONSTRAINT 'name' UNIQUE?

Non voglio e-mail duplicate o nomi utente duplicati che appaiono nel database.

  • Qual è il modo migliore per prevenirlo sulla creazione di una tabella?
  • E qual è la differenza tra i seguenti:

1. UNIQUE (nome utente), UNIQUE (e-mail),

2. UNIQUE KEY (nome utente), CHIAVE UNICA (email),

3. CUORI DI CONSTRUZIONE _login UNIQUE (username, email),

Presumo che alcuni di questi siano sinonimi, tuttavia ho letto informazioni in conflitto online e ho cercato conferma.

Spero che qualcuno possa assistere.

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: l'indice per email, passerà probabilmente solo a rallentare le cose. Il vincolo univoco sulla posta elettronica può funzionare anche come indice normale. La selezione su email restituirà al massimo 1 riga, quindi non è necessario indicizzare il pass. –

risposta

14

1 e 2 sono ide ntical: entrambi creano due indici univoci, uno per ogni chiave. # 3 crea un solo indice univoco su entrambe le chiavi, quindi nessuna combinazione di nome utente ed e-mail può essere duplicata, ma per esempio, un nome utente può essere duplicato purché sia ​​stata usata una diversa e-mail.

Sembra che tu voglia uno dei primi due. CHIAVE UNICA e UNICA sono equivalenti.

+0

Perfetto, evviva le informazioni! – leokennedy

1

Sono tutti sinonimi come evidenziato da syntax documentation:

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

[] in questa notazione (Wirth's notation) indicano elementi opzionali

+2

Il terzo è una chiave complessa su più campi, al contrario di due chiavi distinte. –

+0

In effetti ... non l'ho notato nella domanda. – Mchl

+1

Grazie per il collegamento la sintassi della tabella di creazione MySQL sta iniziando a dare più senso ora. – leokennedy

Problemi correlati