Relacionamento de Tabelas no MySQL

Opa opa! Hoje vamos a mais um tutorial “step by step” onde vou falar e mostrar como fazer relacionamento entre tabelas no MySQL.

O relacionamento de tabelas é necessário quando temos mais de uma tabela com informações que podem e precisam ser cruzadas, por exemplo: categorias e produtos… Cada registro na tabela produtos estará ligado a um registro da tabela categorias.

Só pra vocês saberem, existem três níveis de relacionamento: nosso exemplo será um relação de 1:N (fala-se “um pra N” ou “um para muitos”) onde cada categoria (1) contém um ou mais produtos (N)… Há também o 1:1 onde cada registro de uma tabela (1) está ligado a um e somente um registro de outra tabela (1)… E há outro nível de relacionamento, mais complexo, que é o N:N onde um ou mais registros de uma tabela (N) estão relacionados a um ou mais registros de outra tabela (N), que seria o exemplo de duas tabelas “produtos” e “tags” onde um produto tem várias tags e vários produtos pertencem a uma tag.

Não vou me aprofundar muito no assunto… Vou falar apenas da relação mais comum (1:N) e dar exemplos de como trabalhar com elas.

Para o nosso exemplo de hoje usaremos duas tabelas, chamadas “categorias” e “produtos”:

CREATE TABLE `categorias` (
	`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
	`nome` VARCHAR( 255 ) NOT NULL
) ENGINE = MYISAM;

CREATE TABLE `produtos` (
	`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
	`categoria_id` INT NOT NULL ,
	`nome` VARCHAR( 255 ) NOT NULL ,
	`preco` DECIMAL( 10,2 ) NOT NULL
) ENGINE = MYISAM;

E vamos inserir alguns dados para exemplo:

-- Extraindo dados da tabela `categorias`
INSERT INTO `categorias` VALUES(1, 'Camisetas');
INSERT INTO `categorias` VALUES(2, 'Canecas');

-- Extraindo dados da tabela `produtos`
INSERT INTO `produtos` VALUES(1, 1, 'Camiseta Social', 15.00);
INSERT INTO `produtos` VALUES(2, 1, 'Camiseta Regata', 11.99);
INSERT INTO `produtos` VALUES(3, 2, 'Caneca Grande', 12.00);

Reparem que na tabela produtos temos uma coluna “especial”, que é a “categoria_id” (INT)… Ela é quem ajudará a fazer a relação das duas tabelas… Nessa coluna entrará o ID da categoria a qual o produto pertence… Ou seja: as duas camisetas pertencem a categoria “Camisetas” (ID 1) e o terceiro produto (a Caneca Grande) pertence a categoria “Canecas” (ID 2) e é na coluna “categoria_id” que armazenamos esses IDs que identificam as categorias.

Esse campo responsável pela relação é normalmente chamado de “foreing key” (fk) ou “chave estrangeira”.

Mas qual a utilidade dessa tal “relação”?

Sem usar o relacionamento você poderia pegar todos os produtos e depois pegar as informações das categorias com uma segunda consulta, assim:

<?php

// Consulta que pega todos os produtos
$sql = "SELECT * FROM `produtos` ORDER BY `nome` ASC";
$query = mysql_query($sql);
while ($produto = mysql_fetch_assoc($query)) {
	// Aqui temos o array $produto com todos os valores do produto

	// Consulta para pegar os dados da categoria:
	$sqlC = "SELECT * FROM `categorias` WHERE `id` = " . $produto['categoria_id'];
	$queryC = mysql_query($sqlC);
	$categoria = mysql_fetch_assoc($queryC);

	echo 'Titulo: ' . $produto['nome'] . '<br />';
	echo 'Preço: ' . $produto['preco'] . '<br />';
	echo 'Categoria: ' . $categoria['nome']. '<br />';
	echo '<hr />';
}

?>

Até aí tudo bem… Não tem nenhum pecado nisso… Mas imagine que você tem uma loja com 1000 produtos (o que não é muito), seria executada 1 consulta para todos os produtos e, dentro do loop (while) seriam executadas outras 1000 consultas para pegar o nome da categoria a qual o produto pertence… Ou seja, 1001 consultas, o que é um absurdo.

A mágica da relação

Agora vamos montar uma consulta que DE UMA SÓ VEZ irá pegar os dados de cada produto e também o nome da categoria… Com isso reduziremos nossas 1001 consultas pra… uma só! Sem mistérios, sem sub-consultas, nem consultas dentro do while()! :D

Mas antes de mostrar o script vou ajudar a vocês entenderem como a relação é feita… Antes a nossa consulta que pega apenas os produtos era assim:

SELECT * FROM `produtos` ORDER BY `nome` ASC

Sua tradução seria: SELECIONAR todas as colunas da TABELA `produtos` ORDENADO PELO `nome` ASCENDETEMENTE

Agora usaremos uma nova “palavra” do MySQL que é o JOIN (tradução: “unir”) e serve para unir resultados de duas tabelas.. ;)

Existem três tipos de JOIN mas não vou falar dos outros dois pois eles são MUITO pouco usados… Falaremos do “INNER JOIN” que exige que haja um registro que corresponda a relação nas duas tabelas, ou seja: se houver um produto sem categoria ou a categoria não existir na tabela categorias esse produto é omitido dos resultados.

A nossa consulta ficará assim:

SELECT `produtos`.* FROM `produtos` INNER JOIN `categorias` ON `produtos`.`categoria_id` = `categorias`.`id` ORDER BY `produtos`.`nome` ASC

Sua tradução seria: SELECIONAR todas as colunas [da tabela produtos] da TABELA `produtos` UNINDO A TABELA `categorias` ONDE a coluna `categoria_id` [da tabela produtos] É IGUAL a coluna `id` [da tabela categorias] ORDENADO PELO `nome` [da tabela produtos] ASCENDETEMENTE

A nossa “regra de relação” acontece ali entre o ON e o ORDER BY, dizemos que a relação entre as tabelas usará como referencia a coluna “categoria_id” da tabela “produtos” sendo igual a coluna “id” da tabela “categorias”… Se você fosse usar algum WHERE ele entraria depois do ON e antes do ORDER BY.

Pra quem ainda não entendeu, o ON é como o WHERE de uma consulta normal… É a regra da relação.

Repare que agora precisamos usar um formato diferente para identificar as colunas usando: `tabela`.`coluna`… Isso é necessário pois agora estamos trabalhando com duas tabelas.

Da forma que a nossa consulta está ainda não estamos pegando o nome da categoria… fazemos isso adicionando mais um campo na parte do SELECT, assim:

SELECT `produtos`.*, `categorias`.`nome` FROM `produtos` INNER JOIN `categorias` ON `produtos`.`categoria_id` = `categorias`.`id` ORDER BY `produtos`.`nome` ASC

Agora estamos pegando também o valor da coluna “nome” do registro encontrado (pela relação) na tabela “categorias”.

Só que agora temos um novo problema… Nas duas tabelas existe uma coluna chamada “nome”, e quando estivermos lá no PHP, dentro do while, não teríamos como identificar de qual tabela pegamos as informações (veja a próxima imagem), pois as duas seriam $produto[‘nome’]… Precisamos então renomear esse novo campo que adicionamos a busca, assim:

SELECT `produtos`.*, `categorias`.`nome` AS categoria FROM `produtos` INNER JOIN `categorias` ON `produtos`.`categoria_id` = `categorias`.`id` ORDER BY `produtos`.`nome` ASC

Agora o resultado de `categorias`.`nome` estará presente nos resultados como “categoria” e não “nome”… Sei que parece complicado de início mas vocês vão entender já já.

E por fim, faremos mais uma modificação, pra evitar ficar usando `tabela`.`coluna` também podemos renomear as tabelas, e com isso diminuir otamanho da consulta:

SELECT p.*, c.`nome` AS categoria FROM `produtos` AS p INNER JOIN `categorias` AS c ON p.`categoria_id` = c.`id` ORDER BY p.`nome` ASC

Nesse caso p representará a tabela “produtos” e c representará a “categorias”.

Sei que parece uma consulta maior e mais complicada… Mas você fará o MySQL trabalhar muito menos se fizer assim, com JOINS, do que fazer uma 2ª consulta dentro do while… Essa é a forma mais correta de fazer consultas quando precisamos de informações vindas de mais de uma tabela.

Agora vamos ao nosso novo script de PHP que, sem dúvidas, é bem mais prático e eficiente:

<?php

// Consulta que pega todos os produtos e o nome da categoria de cada um
$sql = "SELECT p.*, c.`nome` AS categoria FROM `produtos` AS p INNER JOIN `categorias` AS c ON p.`categoria_id` = c.`id` ORDER BY p.`nome` ASC";
$query = mysql_query($sql);
while ($produto = mysql_fetch_assoc($query)) {
	// Aqui temos o array $produto com todos os dados encontrados
	echo 'Titulo: ' . $produto['nome'] . '<br />';
	echo 'Preço: ' . $produto['preco'] . '<br />';
	echo 'Categoria: ' . $produto['categoria']. '<br />';
	echo '<hr />';
}

?>

Os outros tipos de JOINs

Existem também outros dois tipos de JOIN: o LEFT JOIN e o RIGHT JOIN:

Se usássemos o LEFT JOIN seriam retornados todos os produtos, independente se eles estão ligados a uma categoria (na tabela categorias) existente ou não.

Já o RIGHT JOIN seria exatamente o contrário: seriam retornados todos os produtos que pertencem categorias existentes e também o nome das outras categorias que não tem ligação com nenhum produto.

O uso desses outros tipos de JOIN é muito raro e acho que não vale a pena ficar filosofando sobre eles enquanto se aprende sobre relacionamentos.

E a relação com mais de duas tabelas?

Só pra exemplo, essa seria a consulta que pega os produtos, as categorias e o nome do usuário que cadastrou o produto e filtrando apenas pelos produtos ativos:

SELECT p.*, c.`nome` AS categoria, u.`nome` AS usuario FROM `produtos` AS p INNER JOIN `categorias` AS c ON p.`categoria_id` = c.`id` INNER JOIN `usuarios` AS u ON p.`usuario_id` = u.`id` WHERE (p.`ativo` = 1) ORDER BY p.`nome` ASC

Sim.. eu adoro consultas gigantescas. :D

58 ideias sobre “Relacionamento de Tabelas no MySQL

  1. Alvaro

    Grande cara, mais uma vez ajudando de maneira exemplar…
    Valeu fera, tirou 1 semana de trampo para fazer o sistema de carnês que estou finalizando…

  2. RenanPro

    Eita… mais uma vez Thiago salvando minha vída, depois de horas pesquisando e não dava certo… agora saiu como eu queria! Parabéns de novo, estou aprendendo demaissss com seu blog!

  3. Michael

    amigos, alguém poderia me ajudar…

    estou com um problema de SELECT com esse “inner join”

    tenho a tabela “filiado” e a tabela “inscricoes”

    eu consegui juntar as duas com o inner join
    mas preciso que mostre somente os resultados que entrariam no WHERE.. por exemplo

    $query = mysql_query(“SELECT f.*, i.* FROM filiado f INNER JOIN inscricao i ON (f.id = i.id_filiado) WHERE f.faixa=’$faixa’ and i.d_peso=’$pes and i.status=’1′ ORDER BY i.id DESC”);

    preciso do nome, da faixa, e do sexo, que está na tabela filiado
    e na inscrição preciso da categoria e do peso..

    para mostrar somente as pessoas que tem essas opções do WHERE

    e jogo no while para mostrar somente os benditos…

    só que já mudei ali lá e não consegui…

    creio eu que tenha alguma maneira de fazer, mas eu até o momento não consegui encontrar…

  4. Nuno Aleixo

    Muito bom tutorial. Sou iniciante na programação por isso não se riam da minha pergunta. Imaginemos que temos 2 tabelas mas em vez de fazer consulta, precisamos de inserir dados.
    Exemplo:

    Tabelas Pais e tabela Filhos

    CREATE TABLE `pais` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `nome` VARCHAR( 255 ) NOT NULL,
    `morada` VARCHAR( 255 ) NOT NULL
    ) ENGINE = MYISAM;

    CREATE TABLE `filhos` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `pais_id` INT NOT NULL ,
    `nome` VARCHAR( 255 ) NOT NULL ,
    `morada` VARCHAR( 255 ) NOT NULL
    ) ENGINE = MYISAM;

    Agora através de um formulario tensiono inserir os registos. Registo um pai, e através do mesmo registo posso registrar os dados do filho na tabela filhos. Como faço? Posso usar o INNER JOIN para INSERT? Como devo fazer para que o campo id_pais da tabela filhos receba o id da tabela pais?

    Peço desculpa colocar a mesma questão, postei no sitio errado:S

    Obrigado Thiago

    1. Bryan Budelon Dorneles

      Olá amigo.
      Você pode usar a chave estrangeira.

      Mais ou menos isso:

      CREATE TABLE `filhos` (
      `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
      `pais_id` INT NOT NULL ,
      `nome` VARCHAR( 255 ) NOT NULL ,
      `morada` VARCHAR( 255 ) NOT NULL,
      FOREIGN KEY(pais_id) REFERENCES pais(id) ON DELETE CASCADE ON UPDATE CASCADE);
      ) ENGINE = MYISAM;

      Isso vai fazer com que pais_id fique associado com o id da tabela pais.

      Aí poderás obter quem é filho de quem através do INNER JOIN, que Thiago posto.

      Espero que tenha te ajudado. Se não conseguir, me pergunte ou me adicione no facebook.

      Até mais!

      1. Nuno Aleixo

        Ola Bryan, obrigado pela resposta. até aí consegui compreender, o que quero saber é no caso de querer fazer um INSERT, como é que adiciono os dados nas duas tabelas?? utilizo o mysql_insert_id()? Ou crio um link para o pai, pego o id do pai, armazeno numa variavel e faço a query
        será que tenho de fazer duas querys? ou também é possivel usar o INNER JOIN para o INSERT?

        Não sei se estão a perceber o que quero dizer…

        O objectivo é eu poder efectuar um registro de um pai e do seu filho, mas imagine que um pai pode ter varios filhos a estudar na mesma escola, durante uma inscrição posso registrar um pai e um filho. através de um formulario.

        Espero que tenha explicado bem :)

        Obrigado pela atenção

      2. Bryan Budelon Dorneles

        Eu não sei como funciona seu sistema, mas se tiver alguma coisa de login e o pai é quem for cadastrar o filho, pode usar session. Que aí na hora de cadastrar, ele pega o id da session da pessoa logada.
        Mas isso não se aplica se não for o pai quem irá fazer o cadastro.

    2. Michael

      amigos, alguém poderia me ajudar…

      estou com um problema de SELECT com esse “inner join”

      tenho a tabela “filiado” e a tabela “inscricoes”

      eu consegui juntar as duas com o inner join
      mas preciso que mostre somente os resultados que entrariam no WHERE.. por exemplo

      $query = mysql_query(“SELECT f.*, i.* FROM filiado f INNER JOIN inscricao i ON (f.id = i.id_filiado) WHERE f.faixa=’$faixa’ and i.d_peso=’$pes and i.status=’1′ ORDER BY i.id DESC”);

      preciso do nome, da faixa, e do sexo, que está na tabela filiado
      e na inscrição preciso da categoria e do peso..

      para mostrar somente as pessoas que tem essas opções do WHERE

      e jogo no while para mostrar somente os benditos…

      só que já mudei ali lá e não consegui…

      creio eu que tenha alguma maneira de fazer, mas eu até o momento não consegui encontrar…

    3. Lincoln Coutinho

      Ou simplesmente você faz duas querys de INSERT, a do pai, e insere a do filho com um campo de ID do pai (chave estrangeira),

  5. Fabio

    Thiago, tudo bem? O post é velho e me esclareceu sobre o INNER JOIN, porém não sei como aplicar ao que eu preciso. Direto ao ponto, usando um exemplo simples o que eu tenho é:

    2 tabelas: usuarios e produtos
    usuarios possui “id”, “email” (tem outras coisas, mas é o que eu preciso pra isso)
    detalhes possui “id”, “id_usuario”, “dia”, “mes”
    Tenho vários detalhes por usuário.

    Preciso listar o detalhe com o ID mais baixo dentre os IDs de cada usuário (por exemplo “nome”) desde que tenha “dia” = $d e “mes” = $m

    1. Nuno Aleixo

      Muito bom tutorial. Sou iniciante na programação por isso não se riam da minha pergunta. Imaginemos que temos 2 tabelas mas em vez de fazer consulta, precisamos de inserir dados.
      Exemplo:

      Tabelas Pais e tabela Filhos

      CREATE TABLE `pais` (
      `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
      `nome` VARCHAR( 255 ) NOT NULL,
      `morada` VARCHAR( 255 ) NOT NULL
      ) ENGINE = MYISAM;

      CREATE TABLE `filhos` (
      `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
      `pais_id` INT NOT NULL ,
      `nome` VARCHAR( 255 ) NOT NULL ,
      `morada` VARCHAR( 255 ) NOT NULL
      ) ENGINE = MYISAM;

      Agora através de um formulario tensiono inserir os registos. Registo um pai, e através do mesmo registo posso registrar os dados do filho na tabela filhos. Como faço? Posso usar o INNER JOIN para INSERT? Como devo fazer para que o campo id_pais da tabela filhos receba o id da tabela pais?

  6. Lúcio

    Thiago, gostei muito do seu post e conseguir buscar a relação entre as tabelas. Mas eu gostaria de saber se você tem algum post ensinando como inserir, editar e excluir referente á estas relações?

  7. Edson Ferreira

    Boa tarde Thiago, me de uma dica, eu to fazendo o site da empresa onde trabalho e estou tentado fazer um sistema onde o funcionario possa visualizar seu hollerith online, então criei duas tabelas uma com o cadastro do usuario e a outra para inserir os holleriths mas nao estou conseguindo chamar na pagina a visualização dos holleriths por funcionario, ou sai todos ou nao sai nenhum
    o que posso fazer?

  8. Rodrigo

    Ainda não percebi uma coisa, aquela ligação que vemos no motor de base de dados Access na qual mostra um para muitos não existe aqui em SQL pois não?

  9. Fernando Carvalho

    opa, muito boa a aula.
    estou com problemas para inserir os dados via
    insert into tambem em tabelas diferentes por meus forms,
    como faço?

    Obrigado.

  10. Eduardo

    Olá Thiago!

    Gostaria de tirar um duvida… no caso acima, como eu poderia inserir um novo produto (via php) já escolhendo a categoria pre existente? Por exemplo, tenho uma página onde crio a categoria “Bermudas”. Depois tenho outra página onde crio o produto, só que nessa página, teria um select para escolher a categoria. To tentando mas sem resultado…

    Abs e excelente topico!

  11. omor

    Olá Thiago blz? Tiago tenho 3 tabelas clientes, pedidos, itens_pedidos, estou querendo relacionar, no formulario itens_pedidos estou querendo que imprima, o nome do cliente e seus respectivos dados pessoais, os dados do pedido e o stauts do pedido.

    minha estrutura do sql tabela itens_pedidos tá assim:

    $sql = mysql_query(“SELECT * FROM itens_pedidos INNER JOIN clientes INNER JOIN pedidos ON clientes.id_cliente = pedidos.id_cliente and pedidos.id_cliente =itens_pedidos.id_cliente and clientes.id_cliente = itens_pedidos.id_cliente”);
    $linha = mysql_fetch_array($sql);

    $id_pedido = $_GET[‘id_pedido’];
    $sql = mysql_query(“SELECT * FROM pedidos INNER JOIN itens_pedidos INNER JOIN clientes ON pedidos.id_pedido=itens_pedidos.id_pedido and pedidos.id_cliente = clientes.id_cliente”);

    só que não está relacionando pois aparece os dados do cliente diferente do id_pedido, ou seja, aparece id_pedido de um cliente e o nome do cliente de outro. obrigado!

  12. Jonathan

    Depois de procurar e muito pela web atrás de uma explicação sobre os relacionamentos de tabelas, e no meu caso é muito importante pois utilizo o ORM Doctrine, o seu blog foi o único que me deu uma luz :D

    Porém eu estou ainda com problemas para entender se um relacionamento entre uma tabela user e friends é 1:N ou N:N
    Um usuário pode ter Vários Amigos.
    Porém Muitos usuários podem ser amigos de vários Usuários. Confudiu :X

    Dá uma luz aew o/

  13. André Luiz Zilz

    Muito interessante seu artigo. Mas estou com uma dúvida cruel: Como faria se quisesse ter um produto com duas ou mais categorias?

  14. Fabio Gialorenço

    Thiago…
    Minha duvida sobre relacionamento é a seguinte
    Voce criou duas tabelas MyIsam que na pratica não estão relacionadas, o relacionamento é feito via php? É isso?

    Não existe a possibilidade da criação do fk e assim manter a integridade dos dados?

    Tem alguma apostila que você poderia me indicar que trata desse assunto.Gostaria de me aprofundar

    Abraços

  15. Diego Vilela

    Vendo isso aqui deu até vergonha de como eu fazia pesquisas desse tipo. Quem tá aprendendo quer logo desenvolver alguma coisa, aí acaba ‘esquecendo’ de melhorar ;]

    O blog tá nos meus favoritos aqui, parabéns.

  16. Alex Torres

    Cara, execelente o Codigo !!! era o que faltava para meus sistemas, eu vinha fazendo tudo consultas dentro do while..
    Valeu mesmo,

  17. Edivan

    primeira vez que entro em um site que o dono se procupou em passar uma informação clara atrávés de texto, detalhe os outros podem yer a mesma ideia mais ainda ficou obscura pra min … porém nesse site clareou bastante.
    valeu mano vc tem uma mente aberta mesmo parabéms

  18. Alex

    parabens tiagão…ótimo tutorial…brother, e para inserir ?? ex: tenho tabela estado, cidade e bairro e quero cadastrar um novo bairro…mas q qdo eu informar o bairro e der um cadastrar, ele vai de acordo com o estado e cidade que eu escolhi…manda essa pra gente !!!

  19. Jackson Jorge

    Olá Thiago, parabéns pelo artigo, está super explicado! Só tenho uma dúvida ou curiosidade que gostaria de tirar.

    Normalmente esses relacionamentos mais simples como esse, eu fazia usando apenas o WHERE e sempre funcionou blz, isso muda alguma coisa com relação ao desempenho das consultas do mysql?

  20. S-Bay

    Hello tiago , parabens :) muito bom
    Estou aqui com uma duvida.
    Como é que eu poderia ver por exemplo só todas as camisetas?

  21. Edvaldo da Rosa

    Parabéns, seu blog é muito bom!

    Sempre procurei algo desse tipo e sempre achei coisas complexas e estranhas. Você explicou tudo de forma bem clara.

  22. Jardim

    Muito bom mesmo Thiago !
    Estou aprendendo ainda mas foi possível entender sim !
    Já corri muito a net mas foi esse teu post que me fez entender !
    E com relação ao uso de FK com com banco do tipo InnoDB, vc tem algum post que trata disso de forma tão clara quanto este aqui postado ?

    Valeu !

  23. Cida

    Parabéns Thiago! Pela sua forma clara e pelo seu desprendimento em compartilhar o seu conhecimento.

    Acredito nas pessoas inteligentes e seguras como você, sem medo de ser feliz… :)

    Sucesso cada vez mais!

  24. Rogerio

    muito grato, ja uso mysql a algum tempo, mas de forma bem rustica, sempre que precisei usar selects maiores sempre faço dentro do while e while… mas essa sua dica foi muito boa. agradeço!

  25. Seyfertt

    Thiago, tudo bom? Tenho uma dúvida…

    Estou fazendo relacionamento 1:1, só que tenho um pequeno problema… É impossível deixar 2 colunas em “auto increment”, sempre que adiciono um novo usuário no banco de dados o ID de usuário fica certo, porem o Config_ID, fica sempre em 0. Tem alguma idéia de como posso arrumar isso?

  26. Thiago Silva

    Irmão, parabéns! vc tem uma metodologia de ensino muito boa. Relmente vc sabe ensinar de uma forma prática e objetiva. Tô entrando nessa área de desenvolvimento de websites e gosto muito dessa área. Já faz algum tempo q eu tava querendo aprender como acontece o relacionamente entre tabelas no mysql e o seu artigo tirou muitas dúvidas minhas. Sou técnico em informática na área de programação e não tive muitas aulas de programação web, mas tô aprendendo estudando sozinho… Ano q vem vou começar o curso superior de programação web. Parabéns pelos artigos. São excelentes. Um abraço.

  27. Tulio

    Parabéns pelo blog, todos os artigos são muito interessantes. Somente uma pergunta: Não seria interessante utilizar nos casos com integridade referencial Engine = InnoDB e definir uma chave estrangeira?

    1. Thiago Belem

      @Tulio
      Realmente existe essa parte de integridade referencial, mas eu acho que pra quem tá começando isso pode parecer muito complexo… Essas relações acabam obrigando o usuário a seguir uma ordem de raciocinio e ações caso eles queiram fazer alguma alteração direto no BD. Mas assim que possível falarei sobre. :]

  28. Fillipe Moraes

    Eu sempre usei (agora vejo que erroneamente) um while dentro de outro.. mas vejo que sempre cometi esse erro por não ter alguma boa explicação como essa.. entendi absolutamente tudo e achei mto fácil!

    Agradeço e estou visitando seu blog pelo menos 3x por semana!
    Valeu!

  29. Renato Reis

    Muito bem explicado mesmo, gosto mto do JOIN, realmente torna as paradas mais legais, e a forma que você explica, não só mostrando o código, mas sim mostrando a gente como tudo funcionando (“ensinando a pescar e não dando o peixe”) acho muito interessante. Vou tentar executar mais esse português literal pra programação que ajuda bastante na hora de pensar.
    Parabéns!

  30. Evandro

    se vc tivesse postado isso no seu blog enqt eu tava tentando aprender o funcionamento de JOIN, com toda certeza não teria demorado 2h pra entender hehehehehehehe, parabéns pela iniciativa… excelente blog

Os comentários estão fechados.