← Stack web // stack web · back end · banco de dados

MySQL: primeira tabela, primeiro SELECT

Todo sistema chega numa hora em que o dado precisa continuar existindo depois que o programa fecha. É aí que entra o banco de dados. MySQL é um dos que você mais vai encontrar em vaga, em hospedagem barata e em projeto antigo que alguém te pediu pra mexer.

O que o MySQL resolve

Pense na planilha de pedidos de uma loja pequena. Enquanto uma pessoa mexe, funciona. Quando duas abrem o arquivo ao mesmo tempo, uma salva por cima da outra e o pedido some. Quando a planilha passa de alguns milhares de linhas, procurar fica lento. E nada impede alguém de digitar "amanhã" no campo de data.

O MySQL assume esses três trabalhos de uma vez. Ele guarda os dados num servidor que fica ligado esperando conexão, atende várias ao mesmo tempo sem uma sobrescrever a outra, e recusa o valor que não cabe no tipo declarado na coluna. O manual oficial define o MySQL como um sistema de gerenciamento de banco de dados, e define o SQL como a linguagem que você usa pra falar com ele.

Os conceitos que você precisa antes da primeira linha

  • Servidor e cliente. Instalar o MySQL põe dois programas na máquina. O servidor (mysqld) fica rodando em segundo plano e guarda os arquivos. O cliente (mysql) é a janela de terminal onde você digita comando. Quem não sobe o servidor não conecta o cliente em lugar nenhum.
  • Banco, tabela, coluna, linha. Um servidor guarda vários bancos. Um banco guarda várias tabelas. A tabela tem colunas fixas, declaradas por você, e linhas com o conteúdo. Toda linha da mesma tabela tem exatamente as mesmas colunas.
  • Tipo de coluna. Cada coluna declara o que aceita: INT ou MEDIUMINT pra número inteiro, VARCHAR(30) pra texto curto, DATE pra data. O tipo trabalha a seu favor porque o banco recusa o que não couber, em vez de aceitar e você descobrir depois.
  • Chave primária. A coluna que identifica cada linha sem repetir valor. Marcada com AUTO_INCREMENT, o próprio MySQL numera as linhas novas, e você nunca precisa inventar o número.
  • O terminador de comando. No cliente de linha de comando, o MySQL só executa quando encontra o ;. Se você apertar Enter sem ele, o prompt muda de mysql> pra ->, avisando que continua esperando o resto da frase. Esse é o susto número um de quem começa.

O banco por dentro: tabelas, tipos e as quatro operações

O modelo relacional é uma planilha com regras: dado mora em tabelas, cada linha é um registro, cada coluna tem nome e tipo declarado. O banco recusa o que não cabe no tipo, e é essa recusa que mantém dez anos de dados coerentes.

  • Tipos de coluna que você vai usar sempre: INT pra número inteiro, DECIMAL pra dinheiro (nunca FLOAT, que arredonda), VARCHAR(n) pra texto curto, TEXT pra texto longo, DATE/DATETIME pra tempo, e NULL como a ausência de valor, permitida ou proibida coluna a coluna.
  • Chave primária e estrangeira: a primária (PRIMARY KEY) identifica cada linha, em geral um id com AUTO_INCREMENT. A estrangeira (FOREIGN KEY) diz que uma coluna aponta pra linha de outra tabela, e o banco impede pedido de cliente que não existe. É a palavra relacional em ação.
  • SQL é o idioma, e o dia a dia são quatro verbos: INSERT cria, SELECT lê, UPDATE altera, DELETE apaga. O WHERE diz em quais linhas, e esquecer o WHERE num UPDATE é o erro clássico que altera a tabela inteira.
CREATE TABLE clientes (
  id    INT AUTO_INCREMENT PRIMARY KEY,
  nome  VARCHAR(80) NOT NULL,
  saldo DECIMAL(10,2) NOT NULL DEFAULT 0
);

INSERT INTO clientes (nome, saldo) VALUES ('Ana', 150.00);

SELECT nome, saldo FROM clientes WHERE saldo > 100;

UPDATE clientes SET saldo = saldo - 50 WHERE id = 1;

Guarde a forma dessas quatro sentenças: elas são o mesmo SQL no MySQL, no PostgreSQL e em quase todo banco relacional que você encontrar.

Hello world: uma tabela que sobrevive ao fechamento

Este roteiro usa o cliente de linha de comando que vem junto com o servidor. Nada de Workbench, nada de phpMyAdmin. A ideia é ver o banco sem intermediário.

  1. Instale o MySQL Community Server. A página oficial de download é dev.mysql.com/downloads/mysql.

    • Windows: baixe o instalador MSI e rode o MySQL Configurator logo depois de instalar. O servidor não sobe antes de ser configurado, e é nessa tela que você define a senha do usuário root. Anote essa senha.
    • macOS: baixe o pacote .dmg, abra o instalador e siga o assistente, que também pede a senha do root. Os programas ficam em /usr/local/mysql/bin.
    • Ubuntu ou Debian: sudo apt-get install mysql-server. O cliente vem no mesmo pacote.
  2. Abra o cliente. No terminal (no Windows, no Prompt de Comando):

    mysql -u root -p

    Ele pede a senha e não mostra o que você digita. Deu certo quando aparece o prompt mysql>.

  3. Crie o banco e entre nele.

    CREATE DATABASE loja;
    USE loja;

    A resposta do segundo comando é Database changed.

  4. Crie a tabela.

    CREATE TABLE produto (
      id MEDIUMINT NOT NULL AUTO_INCREMENT,
      nome VARCHAR(30) NOT NULL,
      PRIMARY KEY (id)
    );

    Confira o que você acabou de criar:

    SHOW TABLES;
    DESCRIBE produto;
  5. Insira três linhas. Repare que você informa só o nome.

    INSERT INTO produto (nome) VALUES
      ('teclado'),('monitor'),('cabo HDMI');
  6. Leia de volta.

    SELECT * FROM produto;
  7. Saia do cliente.

    QUIT
  8. Abra de novo, já apontando pro banco, e repita a leitura.

    mysql -u root -p loja
    SELECT * FROM produto;
A prova de que funcionou. Depois de sair e voltar, o SELECT tem que desenhar na tela a mesma tabela de antes, com moldura de + e |, três linhas, e os ids 1, 2 e 3 que você nunca digitou. No rodapé aparece 3 rows in set. Isso é o ponto inteiro da página: o dado ficou gravado em disco pelo servidor, e o cliente que você fechou era só a janela. Se aparecer ERROR 1046 (3D000): No database selected, você esqueceu o loja no fim do comando e o cliente entrou sem banco escolhido. Rode USE loja; e repita o SELECT. Se aparecer ERROR 1146 (42S02): Table 'algum.produto' doesn't exist, você entrou num banco que existe mas não é o seu, e o nome antes do ponto mostra qual. Já Empty set é outro caso: a tabela está lá e está vazia, então o INSERT do passo 5 não chegou a rodar.

O que o MySQL não é

MySQL não é a linguagem SQL. Essa é a confusão que mais atrapalha quem começa, e ela vem do próprio nome. SQL é a linguagem padronizada de consulta, usada por vários bancos diferentes. MySQL é um dos programas que entendem essa linguagem, ao lado de PostgreSQL, SQL Server, SQLite e outros.

A diferença tem consequência prática. O SELECT, o INSERT e o CREATE TABLE que você acabou de escrever funcionam quase iguais nos outros bancos, então essa parte do aprendizado viaja com você. Já AUTO_INCREMENT, os tipos de tabela e o jeito de configurar usuário são coisa do MySQL, e no PostgreSQL têm outro nome. Quem trata os dois como sinônimo copia comando de tutorial errado e passa a tarde caçando erro de sintaxe.

Fontes

Rodamos este roteiro em 15/08/2026, no MySQL Community Server 8.4.11 (tarball genérico linux-glibc2.28-x86_64 baixado de dev.mysql.com), em Linux, com um servidor próprio na porta 3399. Os oito passos rodaram na ordem escrita. USE loja respondeu Database changed, o CREATE TABLE em quatro linhas fez o prompt virar -> até o ; final e voltou Query OK, 0 rows affected (0.03 sec), o INSERT voltou Query OK, 3 rows affected (0.02 sec) e o SELECT desenhou as três linhas com os ids 1, 2 e 3 e o rodapé 3 rows in set (0.00 sec). Depois do QUIT, com o cliente reaberto por mysql -u root -p loja, o mesmo SELECT devolveu a mesma tabela e o mesmo 3 rows in set. Uma correção veio dessa rodada: o texto da prova dizia que esquecer o loja devolve Empty set, e o servidor devolve ERROR 1046 (3D000): No database selected.

Para continuar

O caminho curto daqui é PostgreSQL, que resolve o mesmo problema cobrando mais rigor de tipo e de restrição na hora de escrever. Depois vale ver MongoDB, que guarda documento em vez de linha de tabela e serve pra comparar as duas formas de pensar. Os três estão no mapa da stack web, junto com as linguagens que vão conversar com eles.

O curso desta trilha está em preparação. A lista paga menos.

Os tutoriais daqui continuam gratuitos. O que está a caminho é um curso pago que transforma esse mapa em formação guiada, na ordem certa e com projeto. Deixe seu e-mail: você recebe os estudos novos gratuitos e, no lançamento, o desconto de quem entrou na lista primeiro.