Home > Blog > Banco de Dados
Banco de Dados
Programação
SQL

O que é MySQL? Como Funciona e Exemplos SQL

Atualizado em: 14 de julho de 2026

Logo do MySQL em um fundo branco

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?

TermoO que significa
SQLLinguagem para definir, consultar e modificar dados relacionais
MySQLSistema que armazena os dados e executa comandos SQL
Banco de dadosConjunto de tabelas, relações, índices e outros objetos
MySQL WorkbenchFerramenta 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.

  1. A aplicação abre uma conexão.
  2. O servidor verifica identidade e privilégios.
  3. O comando SQL é analisado.
  4. O otimizador escolhe um plano de execução.
  5. O mecanismo de armazenamento lê ou altera os dados.
  6. 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: UPDATE e DELETE sem WHERE podem atingir todas as linhas. Teste a condição com um SELECT antes 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

SistemaCaracterísticas gerais
MySQLCliente-servidor, InnoDB e ecossistema amplo
PostgreSQLExtensibilidade, tipos avançados e forte suporte a SQL
MariaDBFork do MySQL com evolução e compatibilidade próprias
SQLiteBanco 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.4

Nã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.

Os 10 Melhores Cursos de Programação de 2026

Descubra os melhores cursos de programação. Aprenda a escolher o curso ideal para iniciar ou avançar na carreira de desenvolvedor

POSTS RELACIONADOS

Ver todos

Seta para a direita