MySQL é um sistema de gerenciamento de banco de dados relacional, também chamado de SGBDR. Ele armazena dados em tabelas relacionadas e permite criar, consultar, atualizar e excluir informações por meio da linguagem SQL.
Aplicações web, lojas virtuais, sistemas internos, APIs e plataformas de conteúdo podem usar MySQL para guardar usuários, pedidos, produtos, configurações e outros dados estruturados.
Resposta rápida: SQL é a linguagem usada para trabalhar com bancos relacionais. MySQL é o software servidor que entende essa linguagem, controla conexões e permissões, mantém transações e grava os dados.
MySQL e SQL são a mesma coisa?
| Termo | O que significa |
|---|---|
| SQL | Linguagem para definir, consultar e modificar dados relacionais |
| MySQL | Sistema que armazena os dados e executa comandos SQL |
| Banco de dados | Conjunto de tabelas, relações, índices e outros objetos |
| MySQL Workbench | Ferramenta gráfica para administrar servidores e executar SQL |
Os fundamentos de SQL também são úteis em PostgreSQL, SQL Server e SQLite, embora cada sistema tenha extensões e comportamentos próprios. Veja o que é SQL.
Como os dados são organizados?
- Tabela: representa uma entidade, como clientes ou produtos;
- coluna: define um atributo e seu tipo, como nome, data ou preço;
- linha: contém um registro individual;
- chave primária: identifica uma linha de forma única;
- chave estrangeira: relaciona uma tabela a outra;
- índice: ajuda a localizar dados sem examinar toda a tabela.
Em uma loja, a tabela pedidos pode guardar apenas o identificador do cliente, evitando repetir nome e email em cada compra.
Como o MySQL funciona?
O MySQL normalmente usa o modelo cliente-servidor. O servidor recebe conexões, autentica usuários, verifica permissões, analisa o SQL e acessa os arquivos de dados. O cliente pode ser uma aplicação, uma ferramenta gráfica ou o programa de linha de comando.
- A aplicação abre uma conexão.
- O servidor verifica identidade e privilégios.
- O comando SQL é analisado.
- O otimizador escolhe um plano de execução.
- O mecanismo de armazenamento lê ou altera os dados.
- O resultado é devolvido ao cliente.
Desempenho depende de modelagem, índices, consultas, memória, armazenamento, volume e concorrência. O nome do banco, sozinho, não determina se uma aplicação será rápida.
O que é InnoDB?
InnoDB é o mecanismo de armazenamento padrão do MySQL atual. Ele oferece transações com propriedades ACID, bloqueio por linha, recuperação após falhas e suporte a chaves estrangeiras.
- Atomicidade: uma transação é concluída por inteiro ou desfeita;
- consistência: regras e restrições permanecem válidas;
- isolamento: operações simultâneas são controladas;
- durabilidade: dados confirmados permanecem gravados.
Versões LTS e Innovation
A Oracle mantém uma linha LTS, voltada à estabilidade e ao suporte prolongado, e uma linha Innovation, que recebe recursos com maior frequência. O MySQL 8.4 pertence à linha LTS.
Para produção, escolha uma versão suportada e confirme compatibilidade de drivers, plugins e consultas. O antigo query cache foi removido no MySQL 8.0 e não deve ser apresentado como recurso atual de desempenho.
Exemplo prático de MySQL
O exemplo abaixo cria um banco de estudo com clientes, pedidos e pagamentos. Execute em um ambiente local, não diretamente em produção.
1. Criar o banco
CREATE DATABASE loja_exemplo
CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci;
USE loja_exemplo;2. Criar as tabelas
CREATE TABLE clientes (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(120) NOT NULL,
email VARCHAR(190) NOT NULL UNIQUE,
criado_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE = InnoDB;
CREATE TABLE pedidos (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
cliente_id BIGINT UNSIGNED NOT NULL,
valor_total DECIMAL(10, 2) NOT NULL,
status ENUM('pendente', 'pago', 'cancelado') NOT NULL DEFAULT 'pendente',
criado_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_pedidos_clientes
FOREIGN KEY (cliente_id) REFERENCES clientes(id),
INDEX idx_pedidos_cliente_data (cliente_id, criado_em)
) ENGINE = InnoDB;
CREATE TABLE pagamentos (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
pedido_id BIGINT UNSIGNED NOT NULL,
valor DECIMAL(10, 2) NOT NULL,
criado_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_pagamentos_pedidos
FOREIGN KEY (pedido_id) REFERENCES pedidos(id)
) ENGINE = InnoDB;As chaves estrangeiras impedem pedidos sem cliente e pagamentos sem pedido. O índice composto ajuda consultas que filtram por cliente e data.
3. Inserir dados
INSERT INTO clientes (nome, email)
VALUES
('Ana Lima', 'ana@example.com'),
('Bruno Souza', 'bruno@example.com');
INSERT INTO pedidos (cliente_id, valor_total, status)
VALUES
(1, 149.90, 'pago'),
(1, 79.50, 'pendente'),
(2, 320.00, 'pago');4. Consultar com JOIN
SELECT
p.id,
c.nome AS cliente,
p.valor_total,
p.status
FROM pedidos AS p
JOIN clientes AS c ON c.id = p.cliente_id
WHERE p.status = 'pago'
ORDER BY p.criado_em DESC;5. Atualizar e excluir
UPDATE pedidos
SET status = 'pago'
WHERE id = 2;
DELETE FROM pedidos
WHERE id = 3 AND status = 'cancelado';Cuidado:
UPDATEeDELETEsemWHEREpodem atingir todas as linhas. Teste a condição com umSELECTantes de alterar dados importantes.
Como funcionam as transações?
Uma transação pode registrar o pagamento e mudar o estado do pedido como uma única operação:
START TRANSACTION;
UPDATE pedidos
SET status = 'pago'
WHERE id = 2 AND status = 'pendente';
INSERT INTO pagamentos (pedido_id, valor)
VALUES (2, 79.50);
COMMIT;Se ocorrer um erro antes do COMMIT, execute ROLLBACK. Na aplicação real, verifique também se o pedido existe, se o valor está correto e se a atualização afetou a quantidade esperada de linhas.
Índices e EXPLAIN
Índices aceleram determinadas buscas, mas ocupam espaço e aumentam o trabalho de escrita. Não crie um índice para cada coluna sem analisar as consultas reais.
EXPLAIN
SELECT *
FROM pedidos
WHERE cliente_id = 1
ORDER BY criado_em DESC;EXPLAIN mostra o plano escolhido pelo otimizador, incluindo índices e estimativa de linhas.
MySQL é gratuito?
O MySQL Community Edition é distribuído sob a GPL e pode ser usado em muitos projetos. A Oracle também oferece edições comerciais, suporte e serviços gerenciados.
As obrigações dependem de como o software é distribuído e integrado. Para decisões comerciais ou jurídicas, consulte os termos oficiais e orientação adequada.
Quando usar MySQL?
- Dados estruturados e relações bem definidas;
- transações e integridade referencial;
- sites, CMS, APIs e sistemas internos;
- projetos com drivers e hospedagem amplamente disponíveis;
- equipes que desejam uma plataforma relacional bem documentada.
Busca especializada, grafos, séries temporais, análise em larga escala e armazenamento de objetos podem exigir outras tecnologias ou uma arquitetura combinada.
MySQL vs PostgreSQL, MariaDB e SQLite
| Sistema | Características gerais |
|---|---|
| MySQL | Cliente-servidor, InnoDB e ecossistema amplo |
| PostgreSQL | Extensibilidade, tipos avançados e forte suporte a SQL |
| MariaDB | Fork do MySQL com evolução e compatibilidade próprias |
| SQLite | Banco incorporado em arquivo, sem servidor separado |
Compare requisitos, operação, experiência da equipe e testes de carga. Conheça o PostgreSQL, o SQLite e os bancos NoSQL.
Boas práticas de segurança
- Não conecte a aplicação com o usuário
root. - Conceda somente as permissões necessárias.
- Use consultas preparadas ou parâmetros do driver.
- Proteja credenciais fora do código.
- Restrinja acesso de rede e use TLS quando necessário.
- Mantenha servidor e drivers atualizados.
- Faça backups e teste a restauração.
Um ORM ajuda a mapear objetos e tabelas, mas não substitui modelagem, índices e segurança. Veja o que é ORM.
Como instalar para estudar
Você pode instalar o MySQL Community Server ou executar um contêiner local. Este comando cria um volume persistente:
docker run --name mysql-estudo -e MYSQL_ROOT_PASSWORD=troque-esta-senha -p 3306:3306 -v mysql_dados:/var/lib/mysql -d mysql:8.4Não exponha a porta publicamente sem necessidade. Para aplicações, crie um usuário próprio e use privilégios mínimos. Veja o que é Docker.
Perguntas frequentes
MySQL é uma linguagem de programação?
Não. MySQL é um sistema de banco de dados. SQL é a linguagem usada para consultar e modificar os dados.
Qual é a porta padrão?
A porta TCP padrão do protocolo clássico é 3306. Ela pode ser alterada.
MySQL aceita JSON?
Sim. O MySQL possui tipo JSON e funções para consultar e modificar documentos.
MySQL é usado pelo WordPress?
Sim. O WordPress armazena posts, usuários, opções e comentários em tabelas de um banco compatível com seus requisitos.
Fontes e verificação
Conteúdo revisado em 14 de julho de 2026 com base no manual oficial do MySQL 8.4, na documentação do InnoDB e no modelo oficial de lançamentos LTS e Innovation.
Conclusão
MySQL é um servidor de banco de dados relacional com suporte a SQL, InnoDB, transações, relações e índices. Ele é adequado para muitos sites, APIs e sistemas transacionais.
Para aprender, pratique tabelas pequenas, relações, consultas e EXPLAIN. Em produção, trate permissões, backups, monitoramento e atualizações como partes essenciais do projeto.




