Pular para o conteúdo principal

Top 34 perguntas e respostas sobre MySQL para 2026

Domine MySQL com este guia de perguntas de entrevista, com exemplos do dia a dia e dicas para você brilhar na sua próxima entrevista de banco de dados!
Atualizado 2 de jun. de 2026  · 15 min lido

Já reparou que MySQL aparece em praticamente toda descrição de vaga ligada a bancos de dados? Não é à toa — o MySQL está por trás de tudo, das suas redes sociais favoritas aos apps que você usa no dia a dia.

Preparei este guia para ajudar você a mandar bem nas perguntas de entrevista sobre MySQL. Vou cobrir do básico, que todo júnior precisa saber, até tópicos mais avançados exigidos em posições sênior. Também compartilho dicas para você se apresentar com confiança nas próximas entrevistas na área de dados. 

O que é MySQL?

MySQL é um SGBDR (sistema de gerenciamento de banco de dados relacional) open source, baseado em SQL, que organiza dados em tabelas estruturadas. Ele é desenvolvido pela Oracle Corporation.

Ele ficou em primeiro lugar como o DBMS open source mais popular em 2024. Porém, a pesquisa Stack Overflow Developer Survey de 2025 mostrou que o PostgreSQL passou a ser o banco de dados mais usado entre desenvolvedores profissionais, superando o MySQL pela primeira vez.

Mas não se engane: o MySQL continua extremamente popular — com 40,5% de uso entre desenvolvedores em 2025 — e ainda alimenta incontáveis aplicações web, sistemas de gestão de conteúdo e ferramentas corporativas. Especialmente se você trabalha com aplicações web ou com o stack LAMP, MySQL é uma habilidade de altíssimo valor.

Gráfico mostrando os bancos de dados mais populares em 2024, com MySQL como o mais popular, seguido por PostgreSQL.

Em 2024, o MySQL foi o DBMS open source mais popular do mundo, com pontuação 1061. Fonte: Statista.

Perguntas básicas sobre MySQL

Na fase inicial da entrevista, o recrutador costuma fazer perguntas fundamentais para avaliar seu entendimento de conceitos básicos de banco de dados e de MySQL. 

1. O que é um banco de dados e qual a diferença para um SGBD? 

Um banco de dados é um repositório que armazena dados aos quais podemos acessar, modificar e analisar. Por exemplo, redes sociais guardam quem curtiu nossos posts em bancos de dados.

Um SGBD (Sistema de Gerenciamento de Banco de Dados) é o software que permite interagir e gerenciar esses dados, criando usuários e controlando acessos. MySQL é um dos SGBDs mais populares. Outros exemplos incluem PostgreSQL, MongoDB e Microsoft SQL Server.

2. Como o MySQL difere de outros sistemas de banco de dados relacionais?

MySQL é um SGBDR open source que usa SQL para gerenciar dados. Ele é conhecido por sua facilidade de uso, velocidade e alta compatibilidade com aplicações web. 

Veja como o MySQL se diferencia de outros SGBDRs:

  • Simplicidade e performance: o MySQL é frequentemente elogiado por sua simplicidade e desempenho otimizado, sendo a escolha de muitos desenvolvedores web e startups.
  • Recursos avançados: embora seja fácil de usar, o MySQL pode carecer de recursos mais avançados presentes em outros SGBDRs, como o PostgreSQL — por exemplo, suporte mais abrangente a transações ACID, indexação avançada e um conjunto mais amplo de tipos de dados.
  • Engines de armazenamento: o MySQL permite escolher diferentes engines para tabelas (ex.: InnoDB, MyISAM), oferecendo flexibilidade para casos de uso específicos.

MySQL é ideal para cenários que exigem velocidade e escalabilidade; já para recursos mais complexos e corporativos, o PostgreSQL pode ser a melhor escolha.

3. Quais são os principais tipos de dados disponíveis no MySQL?

O MySQL oferece diversos tipos de dados, categorizados como:

  • Numéricos: INT, DECIMAL, FLOAT, DOUBLE etc.

  • Texto: CHAR, VARCHAR, TEXT, BLOB.

  • Data/hora: DATE, DATETIME, TIMESTAMP, TIME.

  • JSON: para armazenar objetos JSON.

4. Qual a diferença entre os tipos de dados INT e DECIMAL? 

INT armazena números inteiros, sem casas decimais. Use quando não há necessidade de frações. Já DECIMAL armazena valores financeiros e é indicado para cálculos precisos com decimais. 

5. Em MySQL, qual a diferença entre DATE e DATETIME? 

O tipo DATE armazena a data nos formatos de ano, mês e dia: 

YYYY-MM-DD

Já o tipo DATETIME armazena data e hora, neste formato: 

YYYY-MM-DD HH:MM:SS 

6. O que é uma chave estrangeira (foreign key) e como usá-la em bancos de dados? 

Uma chave estrangeira é um campo em uma tabela que referencia a chave primária de outra tabela. 

Por exemplo, em uma tabela customers que guarda informações de clientes, cada cliente tem um customer_id único — em outra tabela chamada transactions (que registra compras), usamos customer_id como chave estrangeira. O customer_id na tabela de transações vincula cada compra a um cliente específico na tabela customers .

Veja como isso fica em SQL:

CREATE TABLE customers (
    customer_id INT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
);
CREATE TABLE transactions (
    transaction_id INT PRIMARY KEY,
    customer_id INT,
    amount DECIMAL(10,2),
    date DATE,
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

7. Quais as diferenças entre INNER JOIN, LEFT JOIN, RIGHT JOIN e FULL JOIN?

Joins combinam linhas de duas ou mais tabelas com base em colunas relacionadas. As diferenças são:

  • INNER JOIN: retorna linhas quando há correspondência em ambas as tabelas.

  • LEFT JOIN: retorna todas as linhas da tabela da esquerda e as que casam na tabela da direita. Se não houver correspondência, as colunas da direita vêm como NULL.

  • RIGHT JOIN: semelhante ao LEFT JOIN, mas retorna todas as linhas da tabela da direita e as correspondentes da esquerda.

  • FULL JOIN: combina os resultados de LEFT JOIN e RIGHT JOIN, incluindo linhas sem correspondência de ambas as tabelas. Observação: o MySQL não suporta nativamente a sintaxe de FULL JOIN. Para obter o mesmo resultado, use um UNION entre um LEFT JOIN e um RIGHT JOIN

8. Qual a diferença entre DELETE, TRUNCATE e DROP no MySQL?

Comandos como DELETE, TRUNCATE e DROP podem parecer semelhantes, mas se comportam de forma diferente:

DELETE: remove linhas de uma tabela com base em uma condição. Pode ser desfeito se estiver dentro de uma transação. Exemplo:

DELETE FROM employees WHERE department_id = 5;

TRUNCATE: apaga todas as linhas de uma tabela, mas mantém a estrutura. É mais rápido que DELETE e não pode ser desfeito. Exemplo:

TRUNCATE TABLE employees;

DROP: remove completamente a tabela e seus dados, além de dependências como índices. Exemplo:

DROP TABLE employees;

9. Como criar e modificar uma tabela no MySQL? Dê exemplos.

Para criar tabelas, use a instrução CREATE TABLE; para modificar, geralmente ALTER TABLE. Exemplos:

Criar tabela:

CREATE TABLE employees (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), department VARCHAR(50));

Adicionar uma coluna:

ALTER TABLE employees ADD COLUMN salary DECIMAL(10, 2);

10. O que é uma tabela temporária em SQL? 

Uma tabela temporária existe apenas durante a sessão atual do banco. Ao encerrar a sessão, ela é excluída. Esse tipo de tabela armazena resultados intermediários temporariamente, servindo para testes, filtragens ou preparação de dados antes de inseri-los em uma tabela permanente.

Exemplo:

CREATE TEMPORARY TABLE temp_employees (
    id INT,
    name VARCHAR(50)
);
INSERT INTO temp_employees VALUES (1, 'John Doe');
SELECT * FROM temp_employees;

11. O que é uma subquery no MySQL? Explique com um exemplo. 

Uma subquery (também chamada de consulta aninhada) é uma consulta dentro de outra. Ela ajuda a decompor operações complexas em etapas mais gerenciáveis. Por exemplo, para encontrar funcionários que ganham acima da média:

SELECT first_name, last_name, salary
FROM employees
WHERE salary > (
    SELECT AVG(salary)
    FROM employees
);

Dividindo a lógica:

  1. A consulta interna SELECT AVG(salary) FROM employees calcula a média salarial.

  2. A consulta externa usa essa média para filtrar quem ganha acima dela. 

12. Como usar o INSERT no MySQL para adicionar dados a uma tabela? Tem boas práticas? 

Usamos a instrução INSERT para incluir dados em uma tabela. A sintaxe básica é:

INSERT INTO table_name (column1, column2, ...) 
VALUES (value1, value2, ...); 

Algumas boas práticas ao usar INSERT:

  1. Liste as colunas explicitamente. O código fica mais claro e evita erros quando a estrutura muda.

  2. Para colunas AUTO_INCREMENT (como IDs), omita-as no INSERT. O MySQL cuida disso e evita IDs duplicados. 

  3. Seja consistente nas aspas de strings. Eu prefiro aspas simples, mas ambas funcionam.

  4. Para inserir várias linhas, faça em uma única instrução para melhor performance.

13. Qual a importância do atributo AUTO_INCREMENT no MySQL?

O AUTO_INCREMENT gera números únicos e sequenciais para uma coluna, normalmente a chave primária da tabela.

Exemplo de criação de tabela com coluna AUTO_INCREMENT:

CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    department VARCHAR(50)
);

E para inserir linhas:

INSERT INTO employees (name, department) VALUES ('John Doe', 'Sales');
INSERT INTO employees (name, department) VALUES ('Jane Smith', 'Marketing');

14. O que é uma view no MySQL? 

Uma view é uma consulta salva que funciona como uma tabela virtual. Você pega uma query complexa, dá um nome a ela e passa a usá-la como se fosse uma tabela em futuras consultas — sem precisar reescrever tudo toda vez.

Por exemplo, para facilitar a consulta de dados do funcionário com o nome do departamento, crie uma view:

CREATE VIEW employee_details AS
SELECT 
    e.id,
    e.name,
    d.department_name,
    e.salary
FROM 
    employees e
JOIN 
    departments d ON e.department_id = d.department_id;

Agora você pode consultar employee_details como se fosse uma tabela:

SELECT * FROM employee_details;

No entanto, não podemos usar views para inserir ou atualizar dados em muitos casos. A maioria é somente leitura e restringe o acesso direto às tabelas, aumentando a segurança. Em alguns cenários, views podem deixar as consultas mais lentas, pois executam a query subjacente a cada acesso.

Aprimoramento de SQL para iniciantes

Adquira as habilidades de SQL para interagir com seus dados e consultá-los.
Comece a aprender de graça

Perguntas intermediárias sobre MySQL

Nesta seção, vamos cobrir tópicos de nível intermediário. Essas perguntas avaliam principalmente seu conhecimento de tipos de dados e estrutura no MySQL.

15. O que são tabelas com versionamento pelo sistema (system-versioned) e como funcionam? 

Tabelas com versionamento pelo sistema mantêm um histórico completo das alterações feitas em uma tabela. Como guardam versões anteriores de cada linha, podemos usá-las para auditoria e recuperação de dados. 

Elas funcionam adicionando duas colunas extras — StartTime e EndTime — para registrar quando cada linha é válida. Ao inserir, atualizar ou excluir, esses timestamps são atualizados:

  • Insert: cria uma nova linha com StartTime no timestamp atual e EndTime como 9999-12-31 23:59:59 — o maior valor de DATETIME no MySQL, usado como sentinela para indicar "linha ativa".

  • Update: atualiza o EndTime da linha original para o timestamp atual, marcando-a como inválida. Em seguida, cria uma nova linha com os dados atualizados, StartTime atual e EndTime "para sempre".

  • Delete: atualiza o EndTime da linha existente para o timestamp atual, indicando que não é mais válida.

Usando a cláusula FOR SYSTEM_TIME, você pode consultar o estado da tabela em um ponto específico no tempo ou em um intervalo. Por exemplo:

  • FOR SYSTEM_TIME AS OF '2024-01-01': recupera o estado da tabela em 1º de janeiro de 2024.

  • FOR SYSTEM_TIME BETWEEN '2024-01-01' AND '2024-12-31': mostra todas as linhas válidas nesse período.

16. O que são transações no MySQL e como utilizá-las?

Transações são um conjunto de operações executadas como uma unidade. Elas garantem a integridade dos dados, permitindo que tudo seja confirmado ou desfeito em conjunto.

Exemplo de uso:

START TRANSACTION;
UPDATE accounts SET balance = balance - 500 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 500 WHERE account_id = 2;
COMMIT; -- Salva as alterações permanentemente
-- ou
ROLLBACK; -- Reverte as alterações

17. O que é uma restrição de valor padrão (default) no MySQL? Como definir um valor padrão para uma coluna?

Uma restrição default atribui um valor padrão a uma coluna quando nenhum valor é informado durante um INSERT. Isso garante que a coluna permaneça válida mesmo se o usuário omitir esse campo.

Veja como criar uma tabela com valor padrão:

CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    status VARCHAR(10) DEFAULT 'active'
);

Depois, você pode inserir uma linha sem especificar status:

INSERT INTO employees (name) VALUES ('John Doe');

Essa abordagem reduz a chance de NULL ou dados inválidos em colunas críticas e simplifica as consultas, dispensando o tratamento explícito de casos padrão.

Campo

Tipo

Nulo

Chave

Padrão

Extra

id

INT

NÃO

PRI

NULL

AUTO_INCREMENT

name

VARCHAR(50)

SIM

 

NULL

 

status

VARCHAR(10)

SIM

 

active

 

Esse comando é útil porque:

  • Ajuda desenvolvedores a entender o schema antes de escrever queries.
  • Serve para depuração, especialmente em bancos pouco conhecidos.
  • Identifica rapidamente restrições, como chaves primárias e valores padrão.

18. Qual a diferença entre CHAR e VARCHAR no MySQL?

Ambos armazenam textos, mas tratam o armazenamento de forma diferente:

  • CHAR(n) sempre guarda exatamente n caracteres, preenchendo com espaços se o valor for menor. É de tamanho fixo, o que pode ser um pouco mais rápido para colunas com comprimento constante, como códigos de país ou flags de status.

  • VARCHAR(n) guarda apenas os caracteres informados, até o máximo de n. Usa menos espaço para dados de tamanho variável, com pequena sobrecarga para armazenar o comprimento.

CREATE TABLE example (
    country_code CHAR(2),      -- Sempre 2 chars, ex.: 'US', 'UK'
    email VARCHAR(255)         -- Tamanho variável até 255 chars
);

Regra prática: use CHAR para valores de tamanho fixo e VARCHAR para os demais.

19. Como você usaria funções de string em SQL para tratar texto? 

Várias funções de string ajudam a trabalhar com nomes e outros textos. Por exemplo:

  • A função LENGTH() mostra a quantidade de caracteres em um nome. 

  • UPPER() e LOWER() convertem textos para maiúsculas ou minúsculas. 

  • CONCAT() junta nome e sobrenome em uma coluna. 

  • SUBSTRING() extrai partes específicas do texto. Por exemplo, para separar o mês da data de nascimento. 

Exemplo de query:

SELECT 
    UPPER(first_name) AS upper_name,
    CONCAT(first_name, ' ', last_name) AS full_name,
    SUBSTRING(birthdate, 6, 2) AS birth_month,
    TRIM(last_name) AS trimmed_last_name,
    REPLACE(first_name, 'a', '@') AS replaced_name
FROM employees;

Essa consulta:

  • Converte nomes para maiúsculas.

  • Combina nome e sobrenome em nome completo.

  • Extrai o mês de nascimento da coluna birthdate.

  • Remove espaços extras dos sobrenomes.

  • Substitui todas as ocorrências de "a" por "@" nos primeiros nomes.

20. Como atualizar uma linha específica em um banco de dados com SQL?

Use a instrução UPDATE com a cláusula WHERE para identificar o registro que deseja alterar. 

Por exemplo, para atualizar o gênero do filme “Inception” (2010) para “Sci-Fi”:

UPDATE movies
SET genre = 'Sci-Fi'
WHERE movie_title = 'Inception' AND year = 2010;

Aqui, UPDATE movies especifica a tabela a ser atualizada, e a cláusula WHERE mira a linha cujo título é “Inception” e o ano é “2010”. 

Perguntas avançadas sobre MySQL

Perguntas avançadas avaliam sua capacidade de lidar com cenários complexos no MySQL e dão uma ideia de como você toma decisões técnicas. 

21. O que é um trigger no MySQL? Como implementá-lo? 

No MySQL, um trigger é um conjunto de ações executadas quando ocorre um evento no banco. Eles podem rodar antes ou depois de eventos como INSERT, UPDATE ou DELETE

Por exemplo, considere a tabela orders, onde novos pedidos são inseridos. Podemos criar um trigger que registre cada novo pedido na tabela order_history:

CREATE TRIGGER after_order_insert
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
    INSERT INTO order_history (order_id, action, timestamp)
    VALUES (NEW.order_id, 'inserted', NOW());
END;

Após o trigger rodar, a tabela order_history is é atualizada automaticamente:

history_id

order_id

action

timestamp

1

1

inserted

2024-12-24 10:00:00

2

2

inserted

2024-12-24 11:00:00

22. Por que adicionar um índice deixa as consultas SQL mais rápidas? 

Sem índice, o banco precisa varrer linha por linha para achar o registro. Um índice funciona como um sumário, permitindo acesso direto às linhas relevantes. Assim, o tempo de busca cai e as queries rodam mais rápido. 

Índices geralmente usam estruturas como B-trees ou hash tables, que tornam buscas, lookups e varreduras por intervalo eficientes.

Exemplo de criação de índice:

-- Sem índice:
SELECT * FROM employees WHERE last_name = 'Smith';
-- Adicionando um índice na coluna last_name:
CREATE INDEX idx_last_name ON employees(last_name);
-- Com o índice, o banco localiza rapidamente linhas com 'Smith' em last_name.

Índices têm desvantagens, por exemplo:

  • Escritas mais lentas: INSERT, UPDATE e DELETE ficam mais lentos porque o índice precisa ser atualizado a cada mudança.

  • Custo de armazenamento: índices ocupam espaço adicional.

23. Que tipo de dado usar para peso e preço de produto em uma tabela SQL e por quê? 

Para peso, DECIMAL é geralmente a escolha mais segura. Embora FLOAT e REAL armazenem valores decimais, usam aritmética de ponto flutuante, podendo introduzir pequenos erros de arredondamento.

Para pesos de produto em que a precisão importa (ex.: frete, estoque), DECIMAL(8, 3) dá controle preciso com 3 casas decimais e sem surpresas. FLOAT só é aceitável quando uma pequena margem de erro é tolerável.

24. Como encontrar linhas duplicadas em SQL usando função de janela? 

Veja como identificar duplicatas usando ROW_NUMBER():

WITH DuplicateCheck AS (
    SELECT product_name, 
           category,
           ROW_NUMBER() OVER(
               PARTITION BY product_name, category 
               ORDER BY id
           ) AS row_num
    FROM sales
)
SELECT *
FROM DuplicateCheck
WHERE row_num > 1;

Como funciona:

1. ROW_NUMBER() atribui um número a cada linha do resultado. 

2. PARTITION BY agrupa por product_name e category

3. Dentro de cada grupo, as linhas são numeradas a partir de 1. 

4. Qualquer row_num maior que 1 indica duplicata. 

Por exemplo, se tivermos:

  • Produto A, Categoria X, row_num = 1
  • Produto A, Categoria X, row_num = 2 (duplicado)
  • Produto B, Categoria Y, row_num = 1

A query retornará a segunda linha, pois seu row_num é maior que 1.

25. Como criar e usar uma stored procedure com parâmetros no MySQL? Explique com exemplo. 

Stored procedures permitem salvar e reutilizar queries complexas, tornando operações mais eficientes e fáceis de manter. Vamos criar e usar com parâmetros em um exemplo prático.

Suponha um banco de alunos e queremos filtrar por idade. Primeiro, criamos uma procedure simples que recebe a idade:

CREATE PROCEDURE get_student_info(IN age INT)
BEGIN
    SELECT * FROM student WHERE student.age = age;
END;

Para usá-la, basta CALL com a idade desejada:

CALL get_student_info(21);

Podemos deixá-la mais sofisticada com parâmetros de saída. Por exemplo, contar alunos de uma idade específica:

CREATE PROCEDURE count_students_by_age(IN age INT, OUT student_count INT)
BEGIN
    SELECT COUNT(*) INTO student_count FROM students WHERE students.age = age;
END;

Para obter o resultado desta procedure:

SET @count = 0;
CALL count_students_by_age(21, @count);
SELECT @count AS total_students;

26. Por que a integridade referencial é importante em um banco de dados? 

A integridade referencial mantém corretos os relacionamentos entre tabelas. Ao criar uma chave estrangeira, garantimos que os valores em uma tabela existam como valores únicos na tabela referenciada.

Exemplo prático: em um e-commerce, há a tabela Customers e a tabela Orders. Cada pedido precisa pertencer a um cliente real. A integridade referencial, via chave estrangeira, assegura que:

  • Você não crie um pedido para um cliente inexistente.
  • Você não exclua um cliente com pedidos existentes (a menos que configure o que acontece com esses pedidos).
  • Você não altere o ID de um cliente que já tem pedidos.

Então, ao criar uma restrição de chave estrangeira assim:

ALTER TABLE Orders
ADD FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID);

O banco passa a impor automaticamente as regras:

  • Todo CustomerID em Orders deve existir em Customers.

  • Qualquer tentativa de violá-las (como inserir CustomerID inválido) será rejeitada.

Isso evita inconsistências sérias, como pedidos que não podem ser associados a clientes reais ou relatórios com informações faltantes. 

Perguntas de MySQL para administradores de banco de dados

Se você está se candidatando a uma vaga de administrador de banco de dados, aqui estão algumas perguntas comuns.

27. Por que uma aplicação grande usaria sharding de banco de dados? Quais os desafios? 

Aplicações grandes usam sharding para dividir grandes volumes de dados em vários servidores. Cada shard contém uma parte do conjunto. Ao distribuir a carga, reduz-se a necessidade de hardware robusto. Embora a velocidade e a escalabilidade melhorem, há desafios:

  • Algumas consultas, como joins, podem deixar de funcionar ou ficar mais complexas, dificultando a gestão.
  • Com o crescimento dos dados, shards podem sobrecarregar, criando hotspots e degradando a performance. 

28. Explique o papel dos redo logs na recuperação de falhas do MySQL. 

Sempre que dados são modificados no MySQL, é preciso gravar em disco. Escrever diretamente nos arquivos de dados é lento e arriscado. Por isso, antes de modificar qualquer arquivo de dados, o MySQL primeiro registra o que fará no redo log. Isso é mais seguro do que atualizar arquivos de dados diretamente.

Vamos dizer que você atualiza o endereço de um cliente:

  1. O MySQL primeiro grava essa mudança no redo log.
  2. Em seguida, confirma a transação como concluída.
  3. Depois, aplica a mudança nos arquivos de dados.

A recuperação de falhas importa se o MySQL cair após o passo 1 ou 2, mas antes do 3. Ao reiniciar, ele lê os redo logs e conclui o trabalho pendente, reproduzindo as mudanças registradas. Isso garante que transações confirmadas não sejam perdidas, mesmo se o crash ocorrer no pior momento.

29. Quais são as diferentes engines de armazenamento no MySQL e como elas diferem?

O MySQL suporta múltiplas engines de armazenamento, cada uma otimizada para usos distintos. Comparativo das mais comuns:

Engine de armazenamento Principais recursos Melhor para
InnoDB Padrão. Compatível com ACID, bloqueio em nível de linha, transações e chaves estrangeiras. E-commerce, finanças, qualquer cenário que exija integridade de dados.
MyISAM Leituras rápidas, bloqueio em nível de tabela. Sem transações nem chaves estrangeiras. Apps com leitura intensa, onde velocidade importa mais que integridade.
Memory Dados em RAM. Extremamente rápida, mas perde os dados ao reiniciar. Cache, sessões, dados temporários.
CSV Armazena como arquivos CSV. Sem indexação. Troca de dados entre apps ou armazenamento plano simples.
Archive Alta compactação. Apenas INSERT e SELECT. Sem índices. Logs ou históricos raramente consultados.
NDB (Clustered) Armazenamento distribuído, alta disponibilidade, tolerância a falhas, suporta transações. Apps distribuídas em larga escala com performance em tempo real.

30. Como definir a engine de armazenamento padrão no MySQL? 

Primeiro, verifique a engine padrão atual:

SHOW ENGINES;

InnoDB é recomendada como padrão, pois oferece recursos como:

  • Transações compatíveis com ACID
  • Chaves estrangeiras
  • Recuperação de falhas
  • Bloqueio em nível de linha

Para mudar temporariamente a engine padrão na sessão atual:

SET default_storage_engine = 'InnoDB';

Para alterar permanentemente, edite o arquivo de configuração do MySQL adicionando esta linha na seção [mysqld]:

default-storage-engine = InnoDB

31. Como reparar tabelas corrompidas no MySQL? 

Primeiro, verifique todos os bancos com o comando: 

mysqlcheck --check --all-databases -u root -p

Ele escaneia as tabelas e informa se há corrupção. Depois, rode para reparar a tabela: 

mysqlcheck --repair database_name table_name -u root -p

Reparos podem levar à perda de dados em casos graves, então faça backup antes.

Perguntas de MySQL baseadas em cenários e resolução de problemas

Essas perguntas avaliam sua vivência em cenários reais e sua capacidade de resolver problemas.

32. Explique um cenário em que você usou subqueries no MySQL.

Uma forma de responder:

Eu gerenciei o banco de um e-commerce no meu último trabalho e precisei preparar um relatório de produtos. O objetivo era encontrar produtos com vendas acima da média, o que exigia subqueries para uma análise em múltiplas etapas.

A query que desenvolvi foi:

SELECT 
    p.product_id,
    p.product_name,
    s.sales_amount
FROM products p
JOIN sales s ON p.product_id = s.product_id
WHERE s.sales_amount > (
    SELECT AVG(sales_amount)
    FROM sales
)
ORDER BY s.sales_amount DESC;

Primeiro, calculei a média de vendas de todos os produtos com uma subquery no WHERE (AVG(sales_amount) em sales). Essa subquery virou um limite dinâmico para medir o desempenho de cada produto.

A query principal então juntou products e sales para trazer os detalhes relevantes, enquanto o WHERE filtrou os que ficaram abaixo da média. 

Com isso, consegui identificar os produtos de alta performance em uma única operação, sem executar várias consultas separadas.

33. Você pode explicar uma situação em que usou joins para combinar dados de múltiplas tabelas? 

Um exemplo de resposta:

Recentemente, trabalhei em um projeto com duas tabelas principais — uma com dados de vendas e outra com detalhes dos produtos. Minha tarefa era criar um relatório com sales, product name, category e price.

Para combinar os dados, usei um INNER JOIN na coluna em comum, product_id, ligando as transações aos detalhes do produto:

SELECT 
    s.sales_date,
    p.product_name,
    p.category,
    s.quantity_sold,
    p.price
FROM 
    sales s
INNER JOIN 
    products p
ON 
    s.product_id = p.product_id;

O relatório deu uma visão clara das tendências de vendas, ajudando as áreas de negócio a identificar categorias com melhor desempenho e as que precisavam de atenção.

34. Você tem experiência com triggers? Explique como você os utilizou.

Exemplo de resposta:

Sim, tenho ampla experiência com triggers. No meu último cargo, implementei um trigger AFTER UPDATE para auditoria de alterações de preço. 

A implementação: criei um trigger que captura automaticamente o histórico sempre que o preço de um produto muda. Eis o script SQL:

CREATE TRIGGER tr_AuditPriceChanges
AFTER UPDATE ON Products
FOR EACH ROW
BEGIN
    -- Só registra se o preço realmente mudou
    IF OLD.UnitPrice <> NEW.UnitPrice THEN
        INSERT INTO PriceAudit (
            ProductID,
            OldPrice,
            NewPrice,
            ChangedBy,
            ChangeDate,
            PercentageChange
        )
        VALUES (
            NEW.ProductID,
            OLD.UnitPrice,
            NEW.UnitPrice,
            CURRENT_USER(),
            NOW(),
            ROUND(((NEW.UnitPrice - OLD.UnitPrice) / OLD.UnitPrice * 100), 2)
        );
    END IF;
END;

O que tornou a solução eficaz:

  1. Só dispara quando há mudança de preço de fato.
  2. Captura o usuário que fez a alteração com SYSTEM_USER.
  3. Calcula a variação percentual para relatórios.
  4. Inclui uma condição para ignorar não-mudanças decorrentes de updates em outras colunas.

Também adicionamos tratamento de erros e logging após notar casos de borda com preços NULL.

Dicas para se preparar para uma entrevista de MySQL

Se você está começando a carreira, aqui vão algumas dicas para arrasar na entrevista:

Domine os conceitos centrais do MySQL: aprenda os fundamentos de banco de dados como indexação, transações e otimizador de queries. Entenda como o MySQL processa consultas e gerencia armazenamento. Isso ajuda a escrever queries eficientes e a defender suas soluções na entrevista.

Mão na massa: instale o MySQL no seu computador e pratique regularmente. Crie bancos de teste, escreva diferentes tipos de queries e tente otimizá-las. Prática real é a melhor forma de aprender e ganhar confiança.

Para reforçar seus conhecimentos, confira os recursos da DataCamp: 

Conheça ferramentas e integrações do MySQL: familiarize-se com o MySQL Workbench e outras ferramentas de gestão e monitoramento básico. Você também pode explorar como o MySQL funciona com Python e frameworks relevantes, mostrando que você atua bem em ambientes reais de desenvolvimento.

Conclusão

É isso! Reuni as 34 principais perguntas de entrevista sobre MySQL para ajudar você a conquistar sua próxima vaga. Seja para posições de entrada ou para cargos de administração de dados avançados, dominar fundamentos do MySQL, otimização de queries e gestão de bancos é essencial para se destacar. 

Para expandir seu conhecimento em outros sistemas de gerenciamento de banco de dados, confira os cursos de SQL da DataCamp.

Torne-se certificado em SQL

Comprove que suas habilidades em SQL estão prontas para o trabalho com uma certificação.

Laiba Siddiqui's photo
Author
Laiba Siddiqui
LinkedIn
Twitter

Sou um estrategista de conteúdo que adora simplificar tópicos complexos. Ajudei empresas como Splunk, Hackernoon e Tiiny Host a criar conteúdo envolvente e informativo para seus públicos.

Tópicos

Aprenda mais sobre SQL com estes cursos!

Curso

Manipulação de dados em SQL

4 h
324.9K
Domine consultas SQL complexas no PostgreSQL para responder várias perguntas de ciência de dados e preparar conjuntos de dados robustos.
Ver detalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado

blog

As 45 principais perguntas da entrevista sobre PostgreSQL para todos os níveis

Está se candidatando a um emprego que exige fluência em PostgreSQL? Prepare-se para o processo de entrevista com esta lista abrangente de perguntas sobre o PostgreSQL
Javier Canales Luna's photo

Javier Canales Luna

15 min

blog

20 principais perguntas da entrevista sobre junções de SQL

Prepare-se para sua entrevista sobre SQL com esta lista das perguntas mais comuns sobre SQL Joins
Javier Canales Luna's photo

Javier Canales Luna

15 min

blog

As 25 perguntas mais frequentes em entrevistas sobre o Tableau para 2026 (iniciante a avançado)

Tenha sucesso nas suas entrevistas sobre o Tableau com o nosso guia completo, que cobre perguntas comuns para usuários iniciantes, intermediários e avançados.
Chloe Lubin's photo

Chloe Lubin

15 min

Tutorial

Tutorial do MySQL: Um guia abrangente para iniciantes

Descubra o que é o MySQL e como começar a usar um dos sistemas de gerenciamento de banco de dados mais populares.
Javier Canales Luna's photo

Javier Canales Luna

Tutorial

Exemplos e tutoriais de consultas SQL

Se você deseja começar a usar o SQL, nós o ajudamos. Neste tutorial de SQL, apresentaremos as consultas SQL, uma ferramenta poderosa que nos permite trabalhar com os dados armazenados em um banco de dados. Você verá como escrever consultas SQL, aprenderá sobre
Sejal Jaiswal's photo

Sejal Jaiswal

Ver maisVer mais