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:
INTouMEDIUMINTpra número inteiro,VARCHAR(30)pra texto curto,DATEpra 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 demysql>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:
INTpra número inteiro,DECIMALpra dinheiro (nuncaFLOAT, que arredonda),VARCHAR(n)pra texto curto,TEXTpra texto longo,DATE/DATETIMEpra tempo, eNULLcomo 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 umidcomAUTO_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:
INSERTcria,SELECTlê,UPDATEaltera,DELETEapaga. OWHEREdiz em quais linhas, e esquecer oWHEREnumUPDATEé 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.
-
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 doroot. Os programas ficam em/usr/local/mysql/bin. - Ubuntu ou Debian:
sudo apt-get install mysql-server. O cliente vem no mesmo pacote.
- 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
-
Abra o cliente. No terminal (no Windows, no Prompt de Comando):
mysql -u root -pEle pede a senha e não mostra o que você digita. Deu certo quando aparece o prompt
mysql>. -
Crie o banco e entre nele.
CREATE DATABASE loja; USE loja;A resposta do segundo comando é
Database changed. -
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; -
Insira três linhas. Repare que você informa só o
nome.INSERT INTO produto (nome) VALUES ('teclado'),('monitor'),('cabo HDMI'); -
Leia de volta.
SELECT * FROM produto; -
Saia do cliente.
QUIT -
Abra de novo, já apontando pro banco, e repita a leitura.
mysql -u root -p lojaSELECT * FROM produto;
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
- MySQL 8.4 Reference Manual, "What is MySQL?", onde o manual define o produto como sistema de gerenciamento de banco de dados, explica o "SQL" do nome e trata da licença GPL e da licença comercial. Conferida em 15/08/2026.
- MySQL 8.4 Reference Manual, "Entering Queries", origem do terminador de comando e do prompt que muda pra
->em frase incompleta. Conferida em 15/08/2026. - Tutorial oficial, "Creating and Selecting a Database" e "Creating a Table", de onde saíram
CREATE DATABASE,USE,SHOW TABLESeDESCRIBE. Conferidas em 15/08/2026. - MySQL 8.4 Reference Manual, "Using AUTO_INCREMENT", modelo do
CREATE TABLEe doINSERTcom vários valores usados acima. Conferida em 15/08/2026. - Instalação por APT no Debian e Ubuntu, pacote nativo no macOS e instalador MSI no Windows. Conferidas em 15/08/2026.
- Downloads do MySQL Community Server. Em 15/08/2026 a página oferecia 8.4.11 LTS, 9.7.2 LTS, 26.7.0 da série Innovation e 8.0.46. Este tutorial segue o manual da 8.4 LTS. Conferida em 15/08/2026.
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.