Diferença entre chave, chave primária, chave exclusiva e índice no MySQL

250

Quando devo usar KEY, PRIMARY KEY, UNIQUE KEYe INDEX?

SOCORRO
fonte
2
A tecla PRIMARY é para identificar linhas, evite inserir duas linhas com os mesmos dados idênticos ... A tecla INDEX é para acelerar a pesquisa (lentidão mínima na inserção). Chave UNIQUE para dados exclusivos em uma coluna.
Hos Mercury

Respostas:

303

KEYe INDEXsão sinônimos no MySQL. Eles significam a mesma coisa. Nos bancos de dados, você usaria índices para melhorar a velocidade da recuperação de dados. Um índice é tipicamente criado em colunas utilizadas em JOIN, WHEREe ORDER BYcláusulas.

Imagine que você tem uma tabela chamada userse deseja procurar todos os usuários com o sobrenome 'Smith'. Sem um índice, o banco de dados precisaria passar por todos os registros da tabela: isso é lento, porque quanto mais registros você tiver no banco de dados, mais trabalho será necessário para encontrar o resultado. Por outro lado, um índice ajudará o banco de dados a pular rapidamente para as páginas relevantes em que os registros 'Smith' são mantidos. É muito parecido com o modo como nós, humanos, percorremos uma lista telefônica para encontrar alguém com o sobrenome: não começamos a pesquisar a lista de capa a capa, desde que inseramos as informações em alguma ordem que pudermos. use para pular rapidamente para as páginas 'S'.

Chaves primárias e chaves únicas são semelhantes. Uma chave primária é uma coluna ou uma combinação de colunas que pode identificar exclusivamente uma linha. É um caso especial de chave exclusiva . Uma tabela pode ter no máximo uma chave primária, mas mais de uma chave exclusiva. Quando você especifica uma chave exclusiva em uma coluna, nenhuma duas linhas distintas em uma tabela podem ter o mesmo valor.

Observe também que as colunas definidas como chaves primárias ou chaves únicas são indexadas automaticamente no MySQL.

Daniel Vassallo
fonte
2
posso ter uma chave única e uma chave primária com o mesmo valor?
AJUDA
58
@needHELP: se você tiver uma tabela chamada passengerscom os seguintes campos :, (id, first_name, last_name, age, passport_number)normalmente você configuraria a idcoluna para ser a chave primária. Uma chave primária é automaticamente uma chave exclusiva. A principal diferença é que você pode ter apenas uma chave primária na tabela e que a coluna não pode conter NULLvalores. Não é necessário configurar a idcoluna UNIQUEporque, ao defini-la como chave primária, é automaticamente garantida a sua exclusividade ... Então você também pode configurar passport_numberpara UNIQUEque não haja mais de um passageiro ...
Daniel Vassallo
32
... poderia ter o mesmo número de passaporte. No entanto, você pode ter alguns passageiros (crianças, por exemplo) sem número de passaporte. Nesse caso, você pode inserir NULLnessa coluna, sem problemas.
Daniel Vassallo
2
@DanielVassallo Gosto da maneira como você o limpa entre sinônimos usados ​​pelo MySQL.
SIFE 13/03
1
Uma das melhores explicações. Muito obrigado :-)
Ravi Hirani
61

KEY e INDEX são sinônimos.

Você deve adicionar um índice quando as medições de desempenho e EXPLAIN mostrarem que a consulta é ineficiente devido a um índice ausente. A adição de um índice pode melhorar o desempenho das consultas (mas pode diminuir as modificações na tabela).

Você deve usar UNIQUE quando quiser restringir os valores nessa coluna (ou colunas) para serem únicos, para que tentativas de inserir valores duplicados resultem em erro.

Uma CHAVE PRIMÁRIA é uma restrição exclusiva e também implica que a coluna NÃO é NULA. É usado para dar uma identidade a cada linha. Isso pode ser útil para ingressar em outra tabela por meio de uma restrição de chave estrangeira. Embora não seja necessário que uma tabela tenha uma CHAVE PRIMÁRIA, geralmente é uma boa idéia.

Mark Byers
fonte
PRIMARY KEY é usada para dar uma identidade a cada linha? explique desculpe pela minha ignorância.
AJUDA
@needHELP: É usado como uma maneira de identificar exclusivamente qualquer linha da sua tabela. Por exemplo, se você deseja excluir uma linha específica da sua tabela, é útil ter uma maneira de identificá-la sem ambiguidade, para que você não exclua acidentalmente a linha errada. Também é útil para ingressar em outra tabela à medida que é indexada.
Mark Byers
48

A chave primária não permite NULLvalores, mas a chave exclusiva permite NULLvalores.

Podemos declarar apenas uma chave primária em uma tabela, mas uma tabela pode ter várias chaves exclusivas (atribuição de coluna).

Er.Gaurav singh
fonte
17

PRIMARY KEYAND UNIQUE KEYsão semelhantes, exceto que possuem funções diferentes. A chave primária torna a linha da tabela exclusiva (ou seja, não pode haver 2 linhas com a mesma chave). Você pode ter apenas 1 chave primária em uma tabela de banco de dados.

A chave exclusiva torna a coluna da tabela em uma linha da tabela exclusiva (ou seja, nenhuma linha da tabela 2 pode ter o mesmo valor exato). Você pode ter mais de uma coluna da tabela de chaves exclusiva (ao contrário da chave primária, o que significa que apenas uma coluna da tabela é exclusiva).

INDEXtambém cria exclusividade. O MySQL (exemplo) criará uma tabela de indexação para a coluna que está indexada. Dessa forma, é mais fácil recuperar o valor da linha da tabela quando a consulta é consultada nessa coluna da tabela indexada. A desvantagem é que, se você faz muitas atualizações / exclusões / criações, o MySQL precisa gerenciar as tabelas de indexação (e isso pode ser um gargalo de desempenho).

Espero que isto ajude.

Buhake Sindi
fonte
Além disso, UNIQUE KEYpode ser, NULLmas PRIMARY KEYnão pode ser NULL.
Rafay
10

Chaves exclusivas: as colunas nas quais não há duas linhas semelhantes

Chave Primária: Coleção do número mínimo de colunas que pode identificar exclusivamente todas as linhas de uma tabela (ou seja, não há duas linhas iguais em todas as colunas que constituem a chave primária). Pode haver mais de uma chave primária em uma tabela. Se existir uma chave exclusiva, será a chave primária (não "a" chave primária) na tabela. Se não existir uma chave exclusiva, mais de um valor de coluna será necessário para identificar uma linha como (nome, sobrenome, nome, nome do pai, nome da mãe) em algumas tabelas podem constituir chave primária.

Índice: usado para otimizar as consultas. Se você estiver pesquisando ou classificando os resultados com base em alguma coluna várias vezes (por exemplo, a maioria das pessoas pesquisará os alunos pelo nome e não pelo número de rolo), será possível otimizar se os valores da coluna estiverem todos " indexado "por exemplo, com um algoritmo de árvore binária.

Ashwini Dhekane
fonte
Acho que você quis dizer que pode haver apenas um PK em uma tabela
Răzvan Flavius ​​Panda
7

Chave primária - podemos colocar apenas uma chave primária em uma tabela e não podemos deixar essa coluna em branco quando estamos inserindo os valores na tabela.

Chave exclusiva - podemos colocar mais de uma chave exclusiva em uma tabela e podemos deixar essa coluna em branco quando inserirmos os valores na tabela. A coluna recebe valores únicos (não iguais) quando aplicamos a chave primária e única.

VIKASH
fonte
A tabela possui apenas uma chave primária, mas as chaves exclusivas são mais de uma.
VIKASH
6

A chave primária é usada para trabalhar com tabelas diferentes. Essa é a base dos bancos de dados relacionais. Se você possui um banco de dados de livros, é melhor criar 2 tabelas - 1) livros e 2) autores com a chave primária INT "id". Então você usa a identificação nos livros em vez do nome dos autores.

A chave exclusiva é usada se você não quiser ter entradas repetidas. Por exemplo, você pode ter um título na tabela de livros e deseja garantir que haja apenas uma entrada para cada título.

irudyak
fonte
2

Chave única :

  1. Mais de um valor pode ser nulo.
  2. Duas tuplas não podem ter os mesmos valores na chave exclusiva.
  3. Uma ou mais chaves exclusivas podem ser combinadas para formar uma chave primária, mas não vice-versa.

Chave primária

  1. Pode conter mais de uma chave exclusiva.
  2. Representa exclusivamente uma tupla.
Pritam Banerjee
fonte