O MySQL, a partir da versão 3.23.43b, passa a incorporar o recurso de criação e manutenção de tabelas do tipo InnoDB. Tabelas do tipo InnoDB suportam restrições por chave estrangeira e o uso de stored procedures. Assim, se você quer modelar/desenvolver bancos implementando o recurso de chaves estrangeiras, suas tabelas terão que ser do tipo InnoDB.

Criando tabelas

Para criar tabelas do tipo InnoDB, você deverá incluir no final da tabela a seguinte sintaxe:

ENGINE = innodb;

Veja exemplos de criação de tabelas.

CREATE TABLE "cidades" (

"codcidade" INT NOT NULL ,
"descricao" VARCHAR( 50 ) NOT NULL

) ENGINE = innodb;

CREATE TABLE "clientes" (

"codcliente" INT PRIMARY KEY ,
"nome" VARCHAR( 50 ) NOT NULL

) ENGINE = innodb;

CREATE TABLE "vendedores" (

"codvendedor" INT PRIMARY KEY ,
"nome" VARCHAR( 50 ) NOT NULL

) ENGINE = innodb;

CREATE TABLE "vendas" (

"codvenda" INT PRIMARY KEY ,
"datavenda" DATE NOT NULL

"codcliente" INT,
"codvendedor" INT

) ENGINE = innodb;
Listagem 1. Exemplo de criação de tabelas.

Após criar as tabelas, você fará uma alteração na estrutura de cada tabela que necessita utilizar a chave estrangeira. Essa alteração da estrutura da tabela é feita a partir do comando alter table.

Veja alguns exemplos:

ALTER TABLE "clientes" ADD CONSTRAINT "fk_cidade" FOREIGN KEY ( "codcidade" ) REFERENCES "cidade" ( "codcidade" ) ;

ALTER TABLE "vendas" ADD CONSTRAINT "fk_vendas_codcliente" FOREIGN KEY ( "codcliente" ) REFERENCES "clientes" ( " codcliente " ) ;

ALTER TABLE "vendas" ADD CONSTRAINT "fk_vendas_codvendedor" FOREIGN KEY ( "codvendedor" ) REFERENCES "vendedores" ( " codvendedor " ) ;
Listagem 2. Alterando a estrutura das tabelas.

Após criar as chaves estrangeiras vamos verificar a estrutura das tabelas utilizando o comando DESC. Digite DESC vendas para visualizar a estrutura da tabela vendas.

Criando uma chave estrangeira no MySQL
Figura 1. Apresentação da estrutura da tabela vendas.

Conclusões

Neste artigo foram apresentados exemplos práticos da criação de chaves estrangeiras a partir do uso de de tabelas do tipo InnoDB.