Diferencia entre clave, clave primaria, clave única e índice en MySQL


250

¿Cuándo debo usar KEY, PRIMARY KEY, UNIQUE KEYy INDEX?


2
La tecla PRIMARY es para identificar filas, evitar insertar dos filas con los mismos datos idénticos ... La tecla INDEX es para acelerar la búsqueda (mínimamente lenta en la inserción). Clave ÚNICA para datos únicos en una columna.
Hos Mercury


Respuestas:


303

KEYy INDEXson sinónimos en MySQL. Quieren decir lo mismo. En las bases de datos, usaría índices para mejorar la velocidad de recuperación de datos. Un índice se crea normalmente en columnas utilizadas en JOIN, WHEREy ORDER BYcláusulas.

Imagine que tiene una tabla llamada usersy desea buscar todos los usuarios que tienen el apellido 'Smith'. Sin un índice, la base de datos tendría que pasar por todos los registros de la tabla: esto es lento, porque cuantos más registros tenga en su base de datos, más trabajo tendrá que hacer para encontrar el resultado. Por otro lado, un índice ayudará a la base de datos a saltar rápidamente a las páginas relevantes donde se encuentran los registros 'Smith'. Esto es muy similar a cómo nosotros, los humanos, revisamos un directorio de la guía telefónica para encontrar a alguien por el apellido: no comenzamos a buscar en el directorio de principio a fin, siempre y cuando insertemos la información en algún orden que podamos use para saltar rápidamente a las páginas 'S'.

Las claves primarias y las claves únicas son similares. Una clave principal es una columna, o una combinación de columnas, que puede identificar de forma exclusiva una fila. Es un caso especial de clave única . Una tabla puede tener como máximo una clave primaria, pero más de una clave única. Cuando especifica una clave única en una columna, no hay dos filas distintas en una tabla que puedan tener el mismo valor.

También tenga en cuenta que las columnas definidas como claves primarias o claves únicas se indexan automáticamente en MySQL.


2
¿Puedo tener una clave única y una clave primaria con el mismo valor?
AYUDA

58
@needHELP: si tiene una tabla llamada passengerscon los siguientes campos: (id, first_name, last_name, age, passport_number)normalmente configuraría la idcolumna para que sea la clave principal. Una clave primaria es automáticamente una clave única. La principal diferencia es que solo puede tener una clave principal en la tabla y que la columna no puede contener NULLvalores. No es necesario configurar la idcolumna para que sea así UNIQUEporque al establecerla en una clave principal, se garantiza automáticamente que sea única ... Entonces también puede configurarla passport_numberpara UNIQUEque no haya más de un pasajero ...
Daniel Vassallo

32
... podría tener el mismo número de pasaporte. Sin embargo, es posible que tenga algunos pasajeros (niños, por ejemplo) sin un número de pasaporte. En ese caso, puede insertar NULLen esa columna, sin problemas.
Daniel Vassallo

2
@DanielVassallo Me gusta la forma en que lo borras entre sinónimos utilizados por MySQL.
SIFE

1
Una de las mejores explicaciones. Muchas gracias :-)
Ravi Hirani

61

KEY e INDEX son sinónimos.

Debe agregar un índice cuando las mediciones de rendimiento y EXPLAIN le muestren que la consulta es ineficiente debido a que falta un índice. Agregar un índice puede mejorar el rendimiento de las consultas (pero puede ralentizar las modificaciones en la tabla).

Debe usar UNIQUE cuando desee contrainformar los valores en esa columna (o columnas) para que sean únicos, de modo que los intentos de insertar valores duplicados den como resultado un error.

Una CLAVE PRIMARIA es una restricción única y también implica que la columna NO ES NULA. Se utiliza para dar una identidad a cada fila. Esto puede ser útil para unirse con otra tabla mediante una restricción de clave externa. Si bien no es necesario que una mesa tenga una CLAVE PRIMARIA, generalmente es una buena idea.


¿CLAVE PRIMARIA se usa para dar una identidad a cada fila? explica perdón por mi ignorancia.
AYUDA

@needHELP: se utiliza como una forma de identificar de forma exclusiva cualquier fila de su tabla. Por ejemplo, si desea eliminar una fila específica de su tabla, es útil tener alguna forma de identificarla sin ambigüedades para que no elimine accidentalmente la fila incorrecta. También es útil para unirse con otra tabla, ya que está indexada.
Mark Byers el

48

La clave primaria no permite NULLvalores, pero la clave única permite NULLvalores.

Podemos declarar solo una clave primaria en una tabla, pero una tabla puede tener múltiples claves únicas (asignación de columna).


17

PRIMARY KEYY UNIQUE KEYson similares, excepto que tiene diferentes funciones. La clave primaria hace que la fila de la tabla sea única (es decir, no puede haber 2 filas con exactamente la misma clave). Solo puede tener 1 clave principal en una tabla de base de datos.

La clave única hace que la columna de la tabla en una fila de la tabla sea única (es decir, ninguna fila de la tabla 2 puede tener el mismo valor exacto). Puede tener más de 1 columna de tabla de clave única (a diferencia de la clave principal, lo que significa que solo 1 columna de tabla en la tabla es única).

INDEXTambién crea singularidad. MySQL (ejemplo) creará una tabla de indexación para la columna que está indexada. De esta manera, es más fácil recuperar el valor de la fila de la tabla cuando se consulta la consulta en esa columna de tabla indexada. La desventaja es que si realiza muchas actualizaciones / eliminaciones / creaciones, MySQL tiene que administrar las tablas de indexación (y eso puede ser un cuello de botella de rendimiento).

Espero que esto ayude.


Además, UNIQUE KEYpuede ser NULLpero PRIMARY KEYno puede ser NULL.
Rafay

10

Claves únicas: las columnas en las que no hay dos filas similares

Clave primaria: Colección de un número mínimo de columnas que pueden identificar de manera única cada fila de una tabla (es decir, no hay dos filas similares en todas las columnas que constituyen la clave primaria). Puede haber más de una clave primaria en una tabla. Si existe una clave única, entonces es la clave primaria (no "la" clave primaria) en la tabla. Si no existe una clave única, se requerirán más de una columna de valores para identificar una fila como (first_name, last_name, father_name, mother_name) puede en algunas tablas constituir clave primaria.

Índice: se utiliza para optimizar las consultas. Si va a buscar u ordenar los resultados en función de alguna columna muchas veces (por ejemplo, la mayoría de las personas buscarán a los estudiantes por nombre y no por su número de lista), entonces se puede optimizar si los valores de la columna son todos " indexado "por ejemplo con un algoritmo de árbol binario.


Creo que querías decir que solo puede haber un PK en una mesa
Răzvan Flavius ​​Panda

7

Clave primaria : solo podemos poner una clave primaria en una tabla en una tabla y no podemos dejar esa columna en blanco cuando ingresamos los valores en la tabla.

Clave única : podemos poner más de una clave única en una tabla y podemos dejar esa columna en blanco cuando ingresamos los valores en la tabla. La columna toma valores únicos (no iguales) cuando aplicamos la clave primaria y única.


La tabla solo tiene una CLAVE PRIMARIA, pero las claves únicas son más de una.
VIKASH el

6

La clave primaria se usa para trabajar con diferentes tablas. Esta es la base de las bases de datos relacionales. Si tiene una base de datos de libros, es mejor crear 2 tablas: 1) libros y 2) autores con la clave primaria INT "id". Luego usas id en los libros en lugar del nombre del autor.

La clave única se usa si no desea tener entradas repetidas. Por ejemplo, es posible que tenga un título en la tabla de su libro y quiera asegurarse de que solo haya una entrada para cada título.


2

Llave unica :

  1. Más de un valor puede ser nulo.
  2. No hay dos tuplas pueden tener los mismos valores en clave única.
  3. Se pueden combinar una o más claves únicas para formar una clave primaria, pero no al revés.

Clave primaria

  1. Puede contener más de una clave única.
  2. Representa únicamente una tupla.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.