Chave primária, estrangeira e composta no MySQL.

As chaves, em banco de dados, servem para relacionar tabelas e otimizar os resultados de consultas. Temos dois tipos de chaves; chave primária, chave estrangeira e além das chaves temos também os índices (também podem ser chamados de chaves secundárias) que também permitem melhorar consideravelmente a performance do banco de dados quando uma consulta é realizada.

Neste artigo sobre Chave primária, estrangeira e composta no MySQL, vamos aprender;

  1. Chave primária, estrangeira e composta no MySQL
  2. Chaves estrangeiras (FOREIGN KEY) no MySQL
  3. Chaves primárias compostas.

Chave primária (PRIMARY KEY) no MySQL

Para exemplificar esta aula, vamos considerar o seguinte modelo lógico de um banco de dados criado para controlar vendas de um estabelecimento qualquer;

Como criar uma tabela com chave primária?

Podemos definir a chave primária já na criação da tabela, para isso basta usar a seguinte sintaxe;

CREATE TABLE nome_tabela (
    campo_1 tipo
    campo_2 tipo,
    campo_3 tipo,
    PRIMARY KEY (campo_1)
);

Exemplo prático: Crie a seguinte tabela mostrada no modelo lógico a seguir;

O SQL para criar a tabela ficará assim;

CREATE TABLE tb01_produtos (
 tb01_cod_produto INT,
 tb01_nome_produto VARCHAR(120), 
 tb01_preco_produto DECIMAL(9.2), 
 tb01_qtd_produto INT, 
PRIMARY KEY (tb01_cod_produto));

Como criar uma chave primária se a tabela já estiver criada?

As vezes, durante a criação da tabela esquecemos de definir qual é a chave primária dela, ou, pode ocorrer alterações no projeto de banco de dados que necessitem de alterações ou correções.

Se a tabela já estiver criada podemos alterar a sua estrutura usando o comando ALTER TABLE e você precisar acrescentar uma chave primária nela utilize a seguinte sintaxe;

ALTER TABLE nome_tabela
ADD PRIMARY KEY (campo);

Exemplo prático: Crie a tabela a seguir conforme mostra o modelo lógico a seguir. Depois altere a estrutura da tabela para que o campo tb02_cod_compra seja a chave primária da tabela.

CREATE TABLE tb02_compras (
 tb02_cod_compra INT , 
 tb02_data_compra DATE, 
 tb02_hora_compra TIME);

ALTER TABLE tb02_compras
ADD PRIMARY KEY(tb02_cod_compra);

Chaves estrangeiras (FOREIGN KEY) no MySQL

As chaves estrangeiras permite que uma tabela se relacione com outra, por exemplo, em uma loja existe um controle de vendas, aonde é registrada todas as vendas feita pela loja durante o dia, a loja também tem um controle de cliente contendo todos os dados pessoais de cada um deles. Note que temos duas informações totalmente diferentes, mas podemos relacionar as compras com o cliente e logo poderemos saber qual cliente fez determinada compra.

Como criar uma chave estrangeira no MySQL?

As chaves estrangeiras também podem ser criadas durante a criação da tabela ou, alterando a estrutura da tabela após criada. Para isso usamos o atributo FOREIGN KEY. Você precisa passar para este atributo qual campo da tabela será a chave estrangeira e qual a origem desta informação.

Por uma questão de performance, recomendá-se antes de criar uma FOREIGN KEY que seja criado também um INDEX no campo da chave estrangeira. O INDEX permite ordenar os dados mais rapidamente, principalmente quando a tabela possui um volume muito grande de dados.

Exemplo prático; Crie a tabela tb03_itens_compra conforme mostra o modelo lógico a seguir, sendo que o campo tb03_cod_produto é uma chave estrangeira da tabela tb02_produtos.

CREATE TABLE tb03_itens_compra (
 tb03_cod_itens INT ,
 tb03_cod_produto INT ,
 tb03_preco_item DECIMAL(9.2) ,
 tb03_qtd_item INT,
 PRIMARY KEY (tb03_cod_itens)) ;

ALTER TABLE tb03_itens_compra ADD INDEX(tb03_cod_produto);

ALTER TABLE tb03_itens_compra
 ADD FOREIGN KEY (tb03_cod_produto) REFERENCES tb01_produtos(tb01_cod_produto);

Chaves primárias compostas.

Usamos chaves primárias compostas quando precisamos de dois campos para compor uma chave primária. No exemplo a seguir criamos uma tabela cuja a chave primária é constituída de 3 de campos.

CREATE TABLE tb02_cupomfiscal (
tb02_cod_cupom INT,
tb02_cod_compra INT,
tb02_cod_operador INT,
tb02_dia_emissao DATE,
tb02_hora_emissao TIME,
PRIMARY KEY(tb02_cod_cupom, tb02_cod_compra, tb02_cod_operador));
adicionar chave primaria mysqlchave composta mysqlchave composta sqlchave estrangeira mysqlchave primaria composta mysqlchave primaria mysqlcriar chave primaria mysqlforeign key mysql exemplomysql chave compostaprimary key composta mysql