2012-02-08 20 views
12

Tengo una tabla básica de "usuarios" que quiero crear en MySQL.¿Cuál es la diferencia entre UNIQUE, UNIQUE KEY y CONSTRAINT 'name' UNIQUE?

No quiero que aparezcan correos duplicados o nombres de usuario duplicados en la base de datos.

  • ¿Cuál es la mejor manera de evitar esto al crear la mesa?
  • Y cuál es la diferencia entre lo siguiente:

1. UNIQUE (nombre de usuario), (e-mail),

2. UNIQUE KEY (nombre de usuario), LLAVE ÚNICA (correo electrónico),

3. CONSTRAINT ucons _login UNIQUE (nombre de usuario, correo electrónico),

Supongo que algunos de estos son sinónimos, sin embargo, he estado leyendo información conflictiva en línea y estaba buscando confirmación.

Espero que alguien pueda ayudar.

El 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: el índice para el correo electrónico, pase probablemente solo haga las cosas más lentas. La restricción única en el correo electrónico también puede funcionar como un índice normal. Selects on email devolverá como máximo 1 fila por lo que no es necesario indexar también el pase. –

Respuesta

14

1 y 2 son ide ntical: ambos crean dos índices únicos, uno para cada clave. # 3 solo crea un índice único en ambas claves, por lo que no se puede duplicar ninguna combinación de nombre de usuario y correo electrónico, pero, por ejemplo, un nombre de usuario podría duplicarse siempre que se utilizara un correo electrónico diferente.

Parece que probablemente quieras cualquiera de los dos primeros. ÚNICA y ÚNICA CLAVE son equivalentes.

+0

Perfecto, ¡gracias por la información! – leokennedy

1

Todos ellos son sinónimos como se evidencia por syntax documentation:

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

[] en esta notación (Wirth's notation) denotan elementos opcionales

+2

El tercero es una clave compleja en varios campos, en lugar de dos claves distintas. –

+0

De hecho ... No me di cuenta de eso en la pregunta. – Mchl

+1

Gracias por el enlace, la sintaxis de la tabla de creación de MySQL está empezando a tener más sentido ahora. – leokennedy

Cuestiones relacionadas