curso
As 34 principais perguntas e respostas da entrevista sobre o MySQL para 2025
Você já notou que o MySQL é exigido em quase todas as descrições de cargos relacionados a banco de dados? Há um bom motivo para isso: o MySQL é responsável por tudo, desde suas plataformas de mídia social favoritas até os aplicativos que você usa diariamente.
Elaborei este guia para ajudar você a responder às perguntas da entrevista sobre o MySQL. Cobrirei todas as bases, desde o básico que os desenvolvedores juniores devem saber até as coisas complexas que as funções sênior exigem. Além disso, compartilharei algumas dicas para ajudar você a se apresentar como um candidato confiante em suas próximas entrevistas relacionadas a dados.
O que é o MySQL?
O MySQL é um RDBMS (sistema de gerenciamento de banco de dados relacional) de código aberto baseado em SQL que organiza os dados em tabelas estruturadas. Ele foi desenvolvido pela Oracle Corporation.
Ele foi classificado como o DBMS mais popular em 2024 porque cada vez mais empresas estão migrando seus dados para o MySQL. É por isso que, se você está planejando conseguir um emprego em banco de dados, é muito importante ter o conhecimento do MySQL e dos bancos de dados relacionais.
Em junho de 2024, o MySQL é o sistema de gerenciamento de banco de dados (DBMS) de código aberto mais popular do mundo, com uma pontuação de classificação de 1061. Fonte: Statista.
Perguntas básicas da entrevista sobre o MySQL
Na fase inicial da entrevista, o entrevistador pode fazer perguntas fundamentais para avaliar se você entende os conceitos básicos de banco de dados e MySQL.
1. O que é um banco de dados e qual é a diferença entre ele e um DBMS?
Um banco de dados é um contêiner de armazenamento que contém dados que podemos acessar, modificar e analisar. Por exemplo, as plataformas de mídia social armazenam em bancos de dados os dados sobre quem curtiu nossas publicações.
Um DBMS (Sistema de Gerenciamento de Banco de Dados) é o software que nos permite interagir com esses dados e gerenciá-los, criando usuários e gerenciando seu acesso. O MySQL é uma das opções mais populares de DBMS. Outros exemplos incluemPostgreSQL, MongoDB e Microsoft SQL Server.
2. Como o MySQL difere de outros sistemas de gerenciamento de bancos de dados relacionais?
O MySQL é um sistema de gerenciamento de banco de dados relacional (RDBMS) de código aberto que usa SQL para gerenciar dados. Ele é conhecido por sua facilidade de uso, velocidade e compatibilidade com aplicativos baseados na Web.
Aqui está como o MySQL difere de outros RDBMSs:
- Simplicidade e desempenho: O MySQL é frequentemente elogiado por sua simplicidade e desempenho otimizado, o que o torna uma opção para desenvolvedores da Web e startups.
- Recursos avançados: Embora o MySQL seja excelente em termos de facilidade de uso, ele pode não ter os recursos avançados de outros RDBMSs, como o PostgreSQL, como suporte mais abrangente para transações ACID, indexação avançada e um conjunto mais amplo de tipos de dados.
- Mecanismos de armazenamento: O MySQL permite que você escolha diferentes mecanismos de armazenamento (por exemplo, InnoDB, MyISAM) para tabelas, dando-lhes flexibilidade para casos de uso específicos.
O MySQL é ideal para cenários que exigem velocidade e escalabilidade, mas para recursos mais complexos ou de nível empresarial, o PostgreSQL pode ser uma opção melhor.
3. Quais são os principais tipos de dados disponíveis no MySQL?
O MySQL oferece suporte a uma variedade de tipos de dados categorizados como:
- Numérico:
INT
,DECIMAL
,FLOAT
,DOUBLE
, etc. - String:
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. Podemos usá-lo se não houver necessidade de frações. Por outro lado, o site DECIMAL
pode armazenar valores financeiros e é adequado para cálculos precisos com decimais.
5. Como o DATE é diferente do DATETIME no MySQL?
A função DATE
no MySQL armazena a data no formato de ano, mês e dia:
YYYY-MM-DD
No entanto, a função DATETIME
armazena a data com a hora, e ela tem a seguinte aparência:
YYYY-MM-DD HH:MM:SS
6. O que é uma chave estrangeira e como você a usaria em bancos de dados?
Uma chave estrangeira é um campo em uma tabela que se vincula à chave primária de outra tabela.
Por exemplo, em uma tabela customers
que armazena informações de clientes, cada cliente tem um customer_id
exclusivo - em outra tabela chamada transactions
(que armazena registros de compras), usamos customer_id
como uma chave estrangeira. O endereço customer_id
na tabela de transações vinculará cada compra a um cliente específico natabela customers
.
Veja como isso fica no 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 são as diferenças entre INNER JOIN, LEFT JOIN, RIGHT JOIN e FULL JOIN?
As uniões combinam linhas de duas ou mais tabelas com base em colunas relacionadas. Aqui estão suas diferenças:
- INNER JOIN: Retorna as linhas em que há uma correspondência em ambas as tabelas.
- LEFT JOIN: Retorna todas as linhas da tabela da esquerda e as linhas correspondentes da tabela da direita. Se não houver correspondência,
NULL
será retornado para as colunas da tabela correta. - DIREITO DE PARTICIPAR: Semelhante ao
LEFT JOIN
, ele retorna todas as linhas da tabela da direita e as linhas correspondentes da esquerda. - JOIN COMPLETO: Combina os resultados de
LEFT JOIN
eRIGHT JOIN
, incluindo as linhas não correspondentes de ambas as tabelas.
8. Qual é a diferença entre DELETE, TRUNCATE e DROP no MySQL?
Comandos como DELETE
, TRUNCATE
e DROP
podem parecer semelhantes, mas na verdade têm comportamentos diferentes:
- EXCLUIR: Remove linhas de uma tabela com base em uma condição. Ele pode ser revertido se estiver dentro de uma transação. Exemplo:
DELETE FROM employees WHERE department_id = 5;
- TRUNCATE: Exclui todas as linhas de uma tabela, mas a estrutura da tabela permanece intacta. Ele é mais rápido do que o
DELETE
e não pode ser revertido. Exemplo:
TRUNCATE TABLE employees;
- DROP: Remove completamente a estrutura e os dados da tabela, juntamente com quaisquer dependências, como índices. Exemplo:
DROP TABLE employees;
9. Como você cria e modifica uma tabela no MySQL? Forneça exemplos.
Para criar tabelas, você pode usar o comando CREATE TABLE
e, para modificá-las, geralmente o ALTER TABLE
. Aqui estão alguns exemplos:
- Criar tabela:
CREATE TABLE employees (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), department VARCHAR(50));
- Modifique para adicionar uma coluna:
ALTER TABLE employees ADD COLUMN salary DECIMAL(10, 2);
10. O que é uma tabela temporária no SQL?
Uma tabela temporária só existe durante a sessão atual do banco de dados. Quando fechamos a sessão, a tabela é excluída. Esse tipo de tabela pode armazenar temporariamente resultados intermediários. Podemos usá-lo para testar, filtrar ou preparar dados antes de inseri-los em uma tabela permanente.
Aqui está um 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 subconsulta no MySQL? Explique com um exemplo.
Uma subconsulta (também conhecida como consulta aninhada) é aninhada dentro de outra consulta. Ele divide operações complexas do banco de dados em etapas mais gerenciáveis. Por exemplo, você pode criar uma subconsulta para encontrar funcionários que ganham acima do salário médio:
SELECT first_name, last_name, salary
FROM employees
WHERE salary > (
SELECT AVG(salary)
FROM employees
);
Vamos detalhar isso:
- A consulta interna
SELECT AVG(salary) FROM employees
calcula primeiro o salário médio. - A consulta externa usa essa média para encontrar funcionários que ganham acima dela.
12. Como você usaria uma instrução INSERT no MySQL para adicionar dados a uma tabela? Além disso, você tem algumas práticas recomendadas para isso?
Podemos usar a instrução INSERT()
para adicionar dados a uma tabela. A sintaxe básica é:
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
Aqui estão algumas práticas recomendadas que você pode seguir quando usar a declaração INSERT()
:
- Liste explicitamente suas colunas. Isso torna o código mais claro e evita erros se a estrutura da tabela for alterada posteriormente.
- Para colunas
AUTO_INCREMENT
, como IDs, ignore-as na instruçãoINSERT()
. O MySQL lida com isso automaticamente para evitar IDs duplicados. - Seja consistente com as citações de strings. Pessoalmente, prefiro aspas simples, mas qualquer uma delas funciona.
- Se estiver inserindo várias linhas, você pode fazer isso em um único comando para melhorar o desempenho.
13. Qual é o significado do atributo AUTO_INCREMENT no MySQL?
O atributo AUTO_INCREMENT
no MySQL gera números únicos e sequenciais para uma coluna, normalmente a chave primária de uma tabela.
Aqui está um exemplo de como criar uma tabela com uma coluna AUTO_INCREMENT
:
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
department VARCHAR(50)
);
E para inserir linhas nele:
INSERT INTO employees (name, department) VALUES ('John Doe', 'Sales');
INSERT INTO employees (name, department) VALUES ('Jane Smith', 'Marketing');
14. O que é uma visualização no MySQL?
Uma visualização é uma consulta salva que funciona como uma tabela virtual. Com isso, podemos pegar uma consulta complexa, dar um nome a ela e usá-la como uma tabela para consultas futuras. Dessa forma, você não precisa redigitar a consulta inteira todas as vezes.
Por exemplo, para simplificar a consulta dos detalhes dos funcionários junto com os nomes de seus departamentos, você pode criar uma visualização:
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 a visualização employee_details
como se fosse uma tabela:
SELECT * FROM employee_details;
No entanto, não podemos usar exibições para inserir e atualizar os dados. A maioria suporta a opção somente leitura e impede que os usuários acessem o banco de dados, aumentando a segurança dos dados. Às vezes, as visualizações podem tornar as consultas mais lentas, pois executam a consulta subjacente sempre que são acessadas.
Aprimoramento de SQL para iniciantes
Perguntas da entrevista sobre MySQL intermediário
Nesta seção, abordaremos tópicos de nível intermediário. Essas perguntas são feitas principalmente para testar se você conhece os tipos e a estrutura de dados do MySQL.
15. O que são tabelas com versão de sistema e como elas funcionam?
As tabelas com versão de sistema mantêm um histórico completo das alterações feitas em uma tabela. Como eles mantêm versões anteriores de cada linha, podemos usá-los para auditar e recuperar dados.
Eles funcionam adicionando duas colunas extras - StartTime
e EndTime
- para registrar quando cada linha é válida. Quando inserirmos, atualizarmos ou excluirmos dados, esses registros de data e hora serão atualizados:
- Inserir: Uma nova linha é adicionada com um
StartTime
definido como o registro de data e hora atual e umEndTime
de9999-12-31 23:59:59
(ou um valor semelhante que represente "para sempre"). Isso indica que a linha é válida no momento. - Atualizar: O
EndTime
da linha original é atualizado para o carimbo de data/hora atual para marcá-lo como não mais válido. Em seguida, uma nova linha com os dados atualizados é criada, com seuStartTime
definido como o carimbo de data/hora atual eEndTime
como "forever". - Excluir: O endereço
EndTime
da linha existente é atualizado para o registro de data e hora atual, indicando que a linha não é mais válida.
Usando a cláusula FOR SYSTEM_TIME
do SQL, você pode consultar a tabela para visualizar seu estado em um ponto específico no tempo ou em um intervalo de tempo. Por exemplo:
FOR SYSTEM_TIME AS OF '2024-01-01'
: Recupera o estado da tabela como estava em 1º de janeiro de 2024.FOR SYSTEM_TIME BETWEEN '2024-01-01' AND '2024-12-31'
: Mostra todas as linhas válidas dentro desse intervalo de datas.
16. O que são transações MySQL e como você as utiliza?
As transações são um conjunto de operações executadas como uma única unidade. Eles garantem a integridade dos dados, permitindo que todas as operações sejam bem-sucedidas ou falhem juntas.
Aqui está um exemplo de seu uso:
START TRANSACTION;
UPDATE accounts SET balance = balance - 500 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 500 WHERE account_id = 2;
COMMIT; -- Saves changes permanently
-- or
ROLLBACK; -- Reverts changes
17. O que é uma restrição padrão no MySQL? Como você define um valor padrão para uma coluna?
Uma restrição padrão no MySQL atribui um valor padrão a uma coluna quando nenhum valor explícito é fornecido durante uma operação INSERT
. Isso garante que a coluna seja válida mesmo que o usuário a omita durante a entrada de dados.
Veja como você pode criar uma tabela com um valor padrão:
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
status VARCHAR(10) DEFAULT 'active'
);
Em seguida, você pode inserir uma linha sem especificar o endereço status
:
INSERT INTO employees (name) VALUES ('John Doe');
Essa abordagem reduz a probabilidade de NULL
ou de dados inválidos em colunas críticas e simplifica as consultas, eliminando a necessidade de lidar explicitamente com casos padrão.
Resultado:
Campo |
Tipo |
Nulo |
Key |
Padrão |
Extra |
id |
INT |
NÃO |
PRI |
NULL |
AUTO_INCREMENT |
nome |
VARCHAR(50) |
SIM |
NULL |
||
status |
VARCHAR(10) |
SIM |
ativo |
Esse comando é útil porque:
- Ele ajuda os desenvolvedores a entender o esquema da tabela antes de escrever as consultas.
- Ele pode ser usado para depuração, especialmente quando você trabalha com bancos de dados desconhecidos.
- Ele identifica rapidamente as restrições, como chaves primárias ou padrões.
19. Como você usaria as funções de cadeia de caracteres no SQL para gerenciar o texto?
Diferentes funções de string no SQL trabalham com nomes e outros dados de texto. Por exemplo:
- A função
LENGTH()
exibe o número de caracteres em um nome. UPPER()
eLOWER()
convertem o texto em letras maiúsculas ou minúsculas.CONCAT()
une o primeiro e o último nome em uma coluna.SUBSTRING()
extrai partes específicas do texto. Por exemplo, podemos usá-lo para separar o mês da data de nascimento.
Aqui está um exemplo de consulta:
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 em letras maiúsculas.
- Combina o nome e o sobrenome em um nome completo.
- Extrai o mês de nascimento de uma coluna
birthdate
. - Elimina os espaços dos sobrenomes.
- Substitui todas as ocorrências de "a" por "@" em nomes próprios.
20. Como você atualizaria uma linha específica em um banco de dados com SQL?
Você pode usar a instrução UPDATE
e a cláusula WHERE
para identificar o registro que deseja alterar.
Por exemplo, se você quiser atualizar o gênero do filme "Inception" de 2010 para "Sci-fi", poderá usar a seguinte consulta:
UPDATE movies
SET genre = 'Sci-Fi'
WHERE movie_title = 'Inception' AND year = 2010;
Aqui, UPDATE movies
especifica a tabela que queremos atualizar, e a cláusula WHERE
tem como alvo a linha em que o título é "Inception" e o ano é "2010".
Perguntas avançadas da entrevista sobre o MySQL
As perguntas avançadas da entrevista testam sua capacidade de gerenciar cenários complexos do MySQL e dão ao entrevistador uma ideia da sua capacidade de tomar decisões.
21. O que é um acionador no MySQL? Como você o implementa?
No MySQL, um acionador é um conjunto de ações que são executadas quando ocorre um evento no banco de dados. Os acionadores podem ser configurados para serem executados antes ou depois de eventos como INSERT
, UPDATE
, ou DELETE
.
Por exemplo, suponha que haja uma tabela orders
onde novos pedidos são adicionados. Podemos criar um acionador que registre cada novo pedido em uma 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 a execução do acionador, a tabela order_history
éatualizada automaticamente:
history_id |
order_id |
ação |
carimbo de data/hora |
1 |
1 |
inserido |
2024-12-24 10:00:00 |
2 |
2 |
inserido |
2024-12-24 11:00:00 |
22. Por que adicionar um índice torna as consultas SQL mais rápidas?
Se não houver um índice, o banco de dados terá que examinar cada linha para encontrar uma entrada específica. Um índice funciona como um índice, permitindo que o banco de dados acesse as linhas relevantes. Assim, ao adicionar um índice, você reduz o tempo de pesquisa e torna as consultas mais rápidas.
Normalmente, os índices são implementados usando estruturas de dados como árvores B ou tabelas de hash, que permitem que o banco de dados faça pesquisas, buscas e varreduras de intervalo com eficiência.
Aqui está um exemplo de como criar um índice:
-- Without an index:
SELECT * FROM employees WHERE last_name = 'Smith';
-- Adding an index on the last_name column:
CREATE INDEX idx_last_name ON employees(last_name);
-- With the index, the database can quickly locate rows with 'Smith' in the last_name column.
Os índices têm algumas desvantagens, por exemplo:
- Operações de gravação mais lentas:
INSERT
,UPDATE
, eDELETE operations are slower because the index must be updated each time data changes.
- Custo de armazenamento: Os índices exigem espaço de armazenamento adicional.
23. Que tipo de dados usamos para o peso e o preço do produto em uma tabela SQL e por quê?
Usamos o tipo de dados FLOAT
ou REAL
para armazenar o peso porque o peso geralmente inclui valores decimais e aceita uma pequena margem de erro. Como esses tipos de dados podem armazenar valores aproximados, eles são mais adequados para colunas de peso.
O tipo de dados DECIMAL
é comumente usado para armazenar preços porque os valores financeiros, como os preços, não aceitam nem mesmo um pequeno erro de arredondamento. Essa precisão é fornecida somente com o tipo de dados decimais (por exemplo, DECIMAL(10, 2)
para 10 dígitos, com 2 após o ponto decimal).
24. Como você encontra linhas duplicadas no SQL com uma função de janela?
Veja como você pode encontrar duplicatas usando a função da janela 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;
Vamos detalhar como isso funciona:
1. ROW_NUMBER()
atribui um número a cada linha em nosso resultado.
2. PARTITION BY
agrupa as linhas por product_name
e category
.
3. Em cada grupo, as linhas são numeradas a partir de 1.
4. Qualquer row_num
maior que 1 indica uma duplicata.
Por exemplo, se tivermos esses registros:
- Product A, Category X, row_num = 1
- Product A, Category X, row_num = 2 (duplicate)
- Product B, Category Y, row_num = 1
A consulta nos mostrará a segunda linha, pois row_num
é maior que 1.
25. Como você cria e usa um procedimento armazenado com parâmetros no MySQL? Explique com um exemplo.
Podemos salvar e reutilizar consultas complexas com procedimentos armazenados para tornar as operações do banco de dados mais eficientes e passíveis de manutenção. Vamos ver como criá-los e usá-los com parâmetros por meio de um exemplo prático.
Suponhamos que você tenha um banco de dados de alunos e queira criar um procedimento para filtrar os alunos por idade. Veja como podemos fazer isso:
Primeiro, vamos criar um procedimento armazenado simples que recebe um parâmetro de idade:
CREATE PROCEDURE get_student_info(IN age INT)
BEGIN
SELECT * FROM student WHERE student.age = age;
END;
Para usar esse procedimento, basta acessar CALL
com a idade desejada:
CALL get_student_info(21);
Podemos tornar nossos procedimentos mais sofisticados usando parâmetros de saída. Por exemplo, vamos criar um procedimento que conta os 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 desse procedimento, você deve
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 as relações entre as tabelas precisas. Quando criamos uma chave estrangeira, ela garante que os valores em uma tabela correspondam ao valor exclusivo na tabela referenciada.
Aqui está um exemplo prático: Suponha que você esteja gerenciando um banco de dados de comércio eletrônico. Você tem uma tabela Customers
e uma tabela Orders
. Cada pedido deve pertencer a um cliente real. A integridade referencial, implementada por meio de chaves estrangeiras, impõe essa relação, garantindo que você tenha acesso a ela:
- Você não pode criar um pedido para um cliente inexistente.
- Não é possível excluir um cliente com pedidos existentes (a menos que você configure especificamente o que deve acontecer com esses pedidos).
- Você não pode atualizar o ID de um cliente se ele tiver pedidos em andamento.
Portanto, quando você cria uma restrição de chave estrangeira como esta:
ALTER TABLE Orders
ADD FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID);
O banco de dados aplica automaticamente essas regras:
- Cada
CustomerID
na tabelaOrders
deve existir na tabelaCustomers
. - As tentativas de violar essas regras (como inserir um
CustomerID
inválido) serão rejeitadas.
Isso evita inconsistências de dados que poderiam causar problemas sérios, como pedidos que não podem ser rastreados até os clientes reais ou relatórios gerados com informações de clientes ausentes.
Perguntas da entrevista sobre o MySQL para administradores de banco de dados
Se você estiver se candidatando especificamente a uma função de administrador de banco de dados, aqui estão algumas perguntas que os recrutadores podem fazer.
27. Por que um aplicativo grande usaria o sharding de banco de dados? Além disso, conte-me sobre os desafios que você enfrentou com isso.
Um aplicativo grande usa sharding de banco de dados para dividir big data em vários servidores. Cada parte ou fragmento contém uma pequena parte dos dados. Como ele distribui a carga de dados, não há necessidade de hardware de ponta. Embora a velocidade e a escalabilidade também melhorem, ela também tem alguns desafios:
- Algumas consultas, como uniões, podem não funcionar, o que pode complicar o gerenciamento de dados.
- Quando os dados aumentam, os shards podem ficar sobrecarregados, criando pontos de acesso que reduzem o desempenho.
28. Explique a função dos redo logs na recuperação de falhas do MySQL.
Toda vez que os dados são modificados no MySQL, eles precisam ser gravados no disco. No entanto, a gravação direta em arquivos de dados é lenta e arriscada. É por isso que antes de o MySQL modificar qualquer arquivo de dados, ele primeiro escreve o que fará no redo log. Isso é mais seguro do que atualizar aleatoriamente os arquivos de dados.
Então, digamos que você atualize o endereço de um cliente:
- O MySQL primeiro grava essa alteração no redo log.
- Em seguida, ele reconhece que sua transação foi confirmada.
- Por fim, ele aplica a alteração aos arquivos de dados reais.
A recuperação de falhas é importante se o MySQL falhar após a etapa 1 ou 2, mas antes da etapa 3. Quando o MySQL é reiniciado, ele examina seus redo logs e, em seguida, conclui qualquer trabalho inacabado reproduzindo as alterações registradas nos redo logs. Isso garante que as transações confirmadas não sejam perdidas, mesmo que o MySQL falhe em um momento inconveniente.
29. Quais são os diferentes mecanismos de armazenamento disponíveis no MySQL e como eles se diferenciam?
O MySQL oferece suporte a vários mecanismos de armazenamento, cada um otimizado para diferentes casos de uso. Aqui está uma comparação dos mais comuns:
Mecanismo de armazenamento |
Recursos |
Casos de uso |
InnoDB |
- Mecanismo de armazenamento padrão. - Compatível com ACID. - Bloqueio em nível de linha. - Oferece suporte a transações e chaves estrangeiras. |
Aplicativos que exigem alta integridade de dados, como plataformas de comércio eletrônico ou sistemas financeiros. |
MyISAM |
- Rápido para operações de leitura pesada. - Bloqueio em nível de tabela. - Não há suporte para transações ou chaves estrangeiras. |
Aplicativos de leitura intensiva em que a velocidade é mais importante do que a integridade dos dados. |
Memória |
- Armazena dados na RAM. - Extremamente rápido. - Os dados são perdidos na reinicialização. - Tamanho limitado. |
Armazenamento temporário de dados, armazenamento em cache ou gerenciamento de sessões. |
CSV |
- Armazena dados em arquivos CSV simples. - Fácil integração com ferramentas externas. - Não há suporte para indexação. |
Troca de dados entre aplicativos ou para armazenamento simples de dados sem necessidades de consultas complexas. |
Arquivo |
- Otimizado para alta compressão. - Oferece suporte apenas às operações INSERT e SELECT. - Não há índices. |
Armazenamento de dados históricos ou de registro em que a recuperação de dados não é frequente. |
NDB (em cluster) |
- Armazenamento distribuído para o MySQL Cluster. - Alta disponibilidade e tolerância a falhas. - Oferece suporte a transações. |
Aplicativos distribuídos em grande escala que exigem desempenho em tempo real. |
30. Como você definiria um mecanismo de armazenamento padrão no MySQL?
Primeiro, você pode verificar o mecanismo de armazenamento padrão atual:
SHOW ENGINES;
O InnoDB é recomendado como mecanismo padrão, pois oferece suporte a recursos importantes como:
- Transações em conformidade com ACID
- Restrições de chave estrangeira
- Recuperação de falhas
- Bloqueio em nível de linha
Para alterar temporariamente o mecanismo padrão da minha sessão atual, você pode usar:
SET default_storage_engine = 'InnoDB';
Para fazer uma alteração permanente, você pode modificar o arquivo de configuração do MySQL adicionando esta linha na seção [mysqld]
:
default-storage-engine = InnoDB
31. Como você repararia tabelas corrompidas no MySQL?
Primeiro, você pode verificar todos os bancos de dados com este comando:
mysqlcheck --check --all-databases -u root -p
Ele examinará todas as tabelas e informará se há alguma corrupção. Em seguida, você pode executar a seguinte consulta para reparar a tabela:
mysqlcheck --repair database_name table_name -u root -p
Os reparos podem levar à perda de dados em casos de corrupção grave, portanto, certifique-se de fazer backup dos dados.
Perguntas da entrevista sobre o MySQL baseadas em cenários e na solução de problemas
Essas perguntas avaliam sua experiência com cenários complexos do mundo real e suas habilidades de resolução de problemas.
32. Explique um cenário em que você usou subconsultas no MySQL.
Veja como você pode responder a uma pergunta como essa:
No meu último emprego, gerenciei o banco de dados de uma loja de comércio eletrônico e tive que preparar um relatório de produtos. O objetivo era encontrar produtos que gerassem vendas acima da média, o que exigia o uso de subconsultas para realizar essa análise em várias etapas.
Aqui está a consulta SQL que desenvolvi para resolver isso:
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, estabeleci nossa linha de base calculando o valor médio de vendas de todos os produtos. Para isso, usei uma subconsulta na cláusula WHERE
que calculou AVG(sales_amount)
da tabela de vendas. Essa subconsulta atuou como um limite dinâmico em relação ao qual o desempenho de cada produto poderia ser medido.
A consulta principal uniu as tabelas de produtos e vendas para obter detalhes relevantes do produto, enquanto a cláusula WHERE
filtrou todos os produtos com vendas abaixo da média calculada.
Ao estruturar a consulta dessa forma, pude identificar produtos de alto desempenho em uma única operação de banco de dados, em vez de executar várias consultas separadas.
33. Você pode explicar uma situação em que usou junções SQL para combinar dados de várias tabelas?
Aqui está um exemplo de resposta para a pergunta acima:
Recentemente, eu estava trabalhando em um projeto no qual tínhamos duas tabelas principais: uma com dados de vendas de produtos e outra com detalhes de produtos. Minha tarefa era criar um relatório mostrando sales
, product name
, category
e price
.
Para combinar os dados relevantes, usei um INNER JOIN na coluna comum, product_id
, para vincular as transações de vendas 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 forneceu uma visão clara das tendências de vendas, ajudando as partes interessadas a identificar quais categorias de produtos estavam tendo um bom desempenho e quais precisavam de atenção.
34. Você tem alguma experiência com gatilhos? Explique como você os utilizou.
Aqui está um exemplo de resposta para a pergunta acima:
Sim, tenho ampla experiência com acionadores de banco de dados. Em minha função recente, implementei um acionador AFTER UPDATE
para auditoria de alteração de preço.
Deixe-me explicar a você a implementação específica: Criei um acionador que captura automaticamente o histórico de preços sempre que o preço de um produto é alterado. Aqui está o script SQL que desenvolvi:
CREATE TRIGGER tr_AuditPriceChanges
ON Products
AFTER UPDATE AS
BEGIN
-- Only execute if the price was actually changed
IF UPDATE(UnitPrice)
BEGIN
INSERT INTO PriceAudit (
ProductID,
OldPrice,
NewPrice,
ChangedBy,
ChangeDate,
PercentageChange
)
SELECT
i.ProductID,
d.UnitPrice AS OldPrice,
i.UnitPrice AS NewPrice,
SYSTEM_USER,
GETDATE(),
ROUND(((i.UnitPrice - d.UnitPrice) / d.UnitPrice * 100), 2)
FROM INSERTED i
JOIN DELETED d ON i.ProductID = d.ProductID
WHERE i.UnitPrice <> d.UnitPrice;
END
END;
Essa solução foi particularmente eficaz:
- Ele só é acionado quando as alterações de preço realmente ocorrem.
- Ele captura o usuário que faz a alteração usando
SYSTEM_USER
. - Ele calcula a alteração percentual para fins de relatório.
- Ele inclui uma cláusula
WHERE
para filtrar as não alterações que podem ocorrer em outras atualizações de coluna.
Também adicionei tratamento e registro de erros quando notamos alguns casos extremos com os preços do NULL
.
Dicas para você se preparar para uma entrevista com o MySQL
Se você está apenas começando a sua carreira, aqui estão algumas dicas que o ajudarão a ser um craque na sua próxima entrevista:
Dominar os principais conceitos do MySQL: Learn os fundamentos do banco de dados, como indexação, transações e otimizador de consultas. Entenda como o MySQL processa as consultas e gerencia o armazenamento de dados. Isso ajudará você a escrever consultas eficientes e a explicar suas soluções durante a entrevista.
Obtenha experiência prática: Instale o MySQL em seu computador e pratiquee regularmente. Crie bancos de dados de teste, escreva diferentes tipos de consultas e tente otimizá-las. A prática real é a melhor maneira de você aprender como as coisas funcionam e ganhar confiança para a entrevista.
Para aprimorar ainda mais seus conhecimentos, confira os recursos do DataCamp:
- Para introdução ao SQL: Curso de Introdução ao SQL
- Para você praticar SQL: Aplicação de SQL a problemas do mundo real
Saiba mais sobre as ferramentas e integrações do MySQL: Familiarize-se com o MySQL Workbench ou outras ferramentas para gerenciamento de banco de dados e monitoramento básico. You também pode explorar como o MySQL funciona com Python e estruturas relevantes, mostrando que você pode trabalhar em um ambiente de desenvolvimento real.
Conclusão
Aí está o que você precisa! Abordei as 34 principais perguntas da entrevista do MySQL para ajudar você a conseguir seu próximo emprego. Não importa se você está se candidatando a uma função de nível básico ou a um cargo avançado de administrador de dados, é preciso ter uma sólida compreensão dos fundamentos do MySQL, da otimização de consultas e do gerenciamento de bancos de dados para se destacar.
Para expandir ainda mais seus conhecimentos sobre outros sistemas de gerenciamento de banco de dados, confira os cursos de SQL do os cursos de SQL da DataCamp .
Torne-se certificado em SQL
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.
Aprenda mais sobre SQL com estes cursos!
curso
Joining Data in SQL
curso
Data Manipulation in SQL
blog
As 45 principais perguntas da entrevista sobre PostgreSQL para todos os níveis
blog
20 principais perguntas da entrevista sobre junções de SQL
blog
As 30 principais perguntas da entrevista sobre o Excel para todos os níveis
blog
As 25 principais perguntas da entrevista sobre aprendizado de máquina para 2024
blog
Principais perguntas da entrevista do Tableau para 2024 (iniciante a avançado)
tutorial