MySQL: Introdução ao MySQL e aos conceitos básicos de…
O MySQL é o sistema de gerenciamento de banco de dados relacional de código aberto mais popular do mundo — ele torna o armazenamento e a consulta de dados simples e eficientes.
Este tutorial foi elaborado para iniciantes sem experiência prévia. Ele começa com os conceitos básicos de bancos de dados e avança até que você se torne proficiente no uso do MySQL para gerenciamento de dados.
1. O que você vai aprender
- O que é um banco de dados e por que precisamos dele?
- A diferença entre bancos de dados relacionais e não relacionais
- A história e a evolução das versões do MySQL
- Principais vantagens e casos de uso do MySQL
- Noções básicas sobre instalação e conexão com o MySQL
2. A história real de um desenvolvedor
(1) Problema: o Excel já não dá mais conta do recado
Um gerente de operações de comércio eletrônico recebeu uma tarefa urgente:
“Compile as tendências de vendas dos últimos 12 meses, abrangendo 5.000 clientes e 30.000 pedidos — e apresente o relatório ao CEO amanhã de manhã.”
Abrir um arquivo do Excel: mais de 100.000 linhas de dados, tamanho do arquivo 50 MB.
Os problemas surgiram um após o outro:
- O Excel leva 3 minutos para abrir e fica lento toda vez que aplico um filtro
- Quero vincular a “Tabela de Clientes” e a “Tabela de Pedidos”, mas venho usando a função PROCURAR.VERT até ficar com vontade de arrancar os cabelos.
- Os dados foram atualizados, mas o relatório não é atualizado automaticamente.
- Três colegas editando ao mesmo tempo? Conflitos de arquivos, perda de dados
(2) Soluções de banco de dados
Reestruturação com o MySQL:
-- Create a Customer Table
CREATE TABLE customers (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
email VARCHAR(150)
);
-- Create the Orders Table
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
customer_id INT,
amount DECIMAL(10,2),
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES customers(id)
);
-- One SQL Identify Annual Sales Trends
SELECT
DATE_FORMAT(order_date, '%Y-%m') AS month,
COUNT(*) AS total_orders,
SUM(amount) AS total_revenue
FROM orders
WHERE order_date >= '2025-07-01'
GROUP BY month
ORDER BY month;
Comparação de rendimento:
| Dimensão | Excel | MySQL |
|---|---|---|
| Consulta com 100.000 linhas | Mais de 30 segundos | < 1 segundo |
| Junções entre várias tabelas | VLOOKUP manual | JOIN automático |
| Edição colaborativa | Conflitos de arquivos | Operações simultâneas de leitura/gravação sem conflitos |
| Atualização de dados | Atualização manual | Consulta em tempo real dos dados mais recentes |
| Segurança de dados | Risco de perda de dados | Proteção de transações e backups |
3. O que é um banco de dados?
Um banco de dados é um repositório destinado a organizar, armazenar e gerenciar dados de acordo com uma estrutura de dados.
(1) Bancos de dados x armazenamento de arquivos
graph TB
A[Data Storage Methods] --> B[File Storage]
A --> C[Database]
B --> D[Excel / CSV / TXT]
B --> E[Manual Management,Low efficiency]
C --> F[Structured Storage]
C --> G[Efficient Queries,Safe and Reliable]
| Dimensão | Armazenamento de arquivos | Banco de dados |
|---|---|---|
| Volume de dados | Milhares de linhas | De milhões a centenas de milhões de linhas |
| Velocidade da consulta | Lenta (varredura completa do arquivo) | Rápida (otimização do índice) |
| Acesso simultâneo | Não suportado | Suporta acesso simultâneo de leitura/gravação por vários usuários |
| Integridade dos dados | Não garantida | Restrições + transações garantidas |
| Segurança | Nível de arquivo | Permissões do usuário + Criptografia |
(2) Categorias do banco de dados
graph TB
A[Database] --> B[Relational Database RDBMS]
A --> C[Non-relational database NoSQL]
B --> D[MySQL / PostgreSQL]
B --> E[Oracle / SQL Server]
B --> F[SQLite]
C --> G[Key-value type: Redis]
C --> H[Document-based: MongoDB]
C --> I[Column Type: Cassandra]
C --> J[Graph Database: Neo4j]
| Tipo | Produtos representativos | Modelo de dados | Cenários de aplicação |
|---|---|---|---|
| Relacional | MySQL, PostgreSQL | Tabelas (linhas + colunas) | Dados estruturados, processamento de transações |
| Chave-valor | Redis | Pares chave-valor | Armazenamento em cache, sessões, tabelas de classificação |
| Baseado em documentos | MongoDB | Documentos JSON/BSON | Dados semiestruturados, gerenciamento de conteúdo |
| Tipo de família de colunas | Cassandra | Família de colunas | Análise de Big Data, dados de séries temporais |
| Banco de dados de grafos | Neo4j | Nós + Arestas | Redes sociais, sistemas de recomendação |
4. Conceitos fundamentais dos bancos de dados relacionais
(1) Tabela
Uma tabela é a unidade básica para armazenar dados em um banco de dados e é composta por linhas e colunas.
graph LR
subgraph customers Table
direction TB
H[id | name | email | created_at]
R1[1 | Alice | alice@email.com | 2025-01-15]
R2[2 | Bob | bob@email.com | 2025-02-20]
R3[3 | Charlie | charlie@email.com | 2025-03-10]
end
| Termo | Definição | Exemplo |
|---|---|---|
| Tabela | Um conjunto de dados | customers Tabela |
| Linha | Um registro específico | Informações completas sobre Alice |
| Coluna | Uma propriedade dos dados | name Coluna |
| Chave primária | Um campo que identifica de forma exclusiva cada linha | coluna id |
| Chave estrangeira | Um campo que faz referência a outra tabela | orders.customer_id |
(2) Tipos de relacionamento
erDiagram
CUSTOMERS ||--o{ ORDERS : "A customer has multiple orders"
ORDERS ||--|{ ORDER_ITEMS : "An order contains multiple line items"
PRODUCTS ||--o{ ORDER_ITEMS : "An item appears in multiple orders"
| Tipo de relação | Descrição | Exemplo |
|---|---|---|
| Um para um (1:1) | Um registro corresponde a outro registro | Usuário ↔ Cartão de identificação |
| Um para muitos (1:N) | Um registro corresponde a vários registros | Cliente → Pedido |
| Muitos-para-muitos (M:N) | Vários registros correspondem entre si | Alunos ↔ Cursos (por meio do formulário de matrícula) |
(3) Classificação das linguagens SQL
SQL (Structured Query Language) é a linguagem padrão para trabalhar com bancos de dados relacionais.
| Categoria | Nome completo | Palavras-chave | Objetivo |
|---|---|---|---|
| DDL | Linguagem de Definição de Dados | CREATE/ALTER/DROP | Define a estrutura do banco de dados |
| DML | Linguagem de Manipulação de Dados | INSERT/UPDATE/DELETE | Inserir, atualizar e excluir dados |
| DQL | Linguagem de Consulta de Dados | SELECT | Consultar dados |
| DCL | Linguagem de Controle de Dados | GRANT/REVOKE | Gerenciamento de permissões |
| TCL | Linguagem de Controle de Transações | COMMIT/ROLLBACK | Controle de transações |
5. A história do MySQL
(1) Histórico de versões
timeline
title MySQL Version History
1995 : MySQL 1.0 Published
: From Sweden MySQL AB Company Development
2000 : MySQL 3.23
: Supports transaction processing
2003 : MySQL 4.0
: Support UNION Search
2005 : MySQL 5.0
: Supports stored procedures、View、Trigger
2008 : Sun Acquisition MySQL AB
2010 : Oracle Acquisition Sun
: Obtain MySQL Ownership
2013 : MySQL 5.6
: InnoDB Full-Text Search
2016 : MySQL 5.7
: JSON Support、Performance Improvements
2018 : MySQL 8.0
: Window Functions、CTE、Characters
2024 : MySQL 8.4 LTS
: Long-Term Support Version
2024 : MySQL 9.0 Innovation
: Latest Innovative Version
(2) A filosofia de projeto do MySQL
Princípios fundamentais de design do MySQL:
Simplicidade em primeiro lugar
- Instalação e configuração simples, com uma curva de aprendizado suave
- A sintaxe é intuitiva e se assemelha bastante à linguagem natural
Desempenho em primeiro lugar
- Velocidades de leitura extremamente altas, tornando-o ideal para cenários com cargas de trabalho intensas de leitura e leves de gravação
- O mecanismo de armazenamento InnoDB oferece processamento de transações de alto desempenho
Ecossistema aberto
- Código aberto e gratuito (licença GPL)
- Uma ampla variedade de ferramentas e drivers de terceiros
6. Principais vantagens do MySQL
(1) Comparação das vantagens
| Dimensão | MySQL | PostgreSQL | Oracle | SQL Server |
|---|---|---|---|---|
| Preço | Gratuito (código aberto) | Gratuito (código aberto) | Caro (comercial) | Caro (comercial) |
| Nível de dificuldade | ⭐ Fácil | ⭐⭐ Moderado | ⭐⭐⭐ Difícil | ⭐⭐ Moderado |
| Desempenho de leitura | ⭐⭐⭐ Extremamente rápido | ⭐⭐ Rápido | ⭐⭐ Rápido | ⭐⭐ Rápido |
| Atividade da comunidade | ⭐⭐⭐ Muito alta | ⭐⭐ Alta | ⭐ Moderada | ⭐ Moderada |
| Casos de uso | Aplicativos web, comércio eletrônico | Consultas complexas, SIG | Sistemas empresariais de grande escala | Ecossistema Windows |
(2) Casos de uso típicos
mindmap
root((MySQL Applications))
Web Development
Blog System
E-commerce Platform
Social Networks
Content Management
Enterprise Applications
ERP System
CRM System
Inventory Management
Order Processing
Data Analysis
Log Storage
User Behavior
Report Statistics
Mobile Apps
App Backend
Game Data
Push Notification System
Quem usa o MySQL?
| Empresa | Objetivo |
|---|---|
| Meta (Facebook) | Dados do usuário, gráfico social |
| Tweets, perfis de usuários | |
| GitHub | Repositórios de código, dados de usuários |
| Airbnb | Anúncios, reservas, usuários |
| Shopify | Back-end de comércio eletrônico, produtos e pedidos |
| Booking.com | Reservas de hotéis, avaliações de usuários |
7. Uma breve introdução ao MySQL
(1) Como se conectar ao MySQL em três etapas
| Etapa | Comando/Ação |
|---|---|
| 1. Instalação | Inicie o Docker com um único comando (consulte a Lição 2 para mais detalhes) |
| 2. Conexão | mysql -u root -p |
| 3. Verificação | SELECT VERSION(); |
📖 A próxima lição abordará em detalhes: instalação multiplataforma (Windows/Mac/Linux/Docker), conexão com o MySQL Workbench e configuração de segurança. Esta seção oferece apenas uma breve visão geral.
▶ Exemplo: Iniciando o Docker com um único comando
# Pull and Start MySQL 8.0 (see Lesson 2 for details)
docker run -d --name mysql-tutorial \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=MyPass123! \
mysql:8.0
# Enter MySQL Command Line
docker exec -it mysql-tutorial mysql -u root -pMyPass123!
▶ Exemplo: Verificação rápida após a conexão
-- View MySQL Version
SELECT VERSION();
-- View All Databases
SHOW DATABASES;
Saída:
+-----------+
| VERSION() |
+-----------+
| 8.0.36 |
+-----------+
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
▶ Exemplo: Criando seu primeiro banco de dados e sua primeira tabela
-- 1. Create a Database
CREATE DATABASE my_first_db;
-- 2. Using the Database
USE my_first_db;
-- 3. Create a user table
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 4. Insert Data
INSERT INTO users (username, email) VALUES ('Alice', 'alice@example.com');
INSERT INTO users (username, email) VALUES ('Bob', 'bob@example.com');
-- 5. Query Data
SELECT * FROM users;
Saída:
+----+----------+-----------------+---------------------+
| id | username | email | created_at |
+----+----------+-----------------+---------------------+
| 1 | Alice | alice@example.com | 2026-07-03 10:30:00 |
| 2 | Bob | bob@example.com | 2026-07-03 10:30:01 |
+----+----------+-----------------+---------------------+
▶ Exemplo: Operações CRUD em dados
-- Conditional Query
SELECT username, email FROM users WHERE username = 'Alice';
-- Update Data
UPDATE users SET email = 'alice_new@example.com' WHERE id = 1;
-- Delete Data
DELETE FROM users WHERE id = 2;
-- Count the number of users
SELECT COUNT(*) AS total_users FROM users;
❓ Perguntas Frequentes
P: Qual é a relação entre o MySQL e o SQL? R: O SQL é a linguagem padrão para operar bancos de dados (semelhante ao “inglês”), enquanto o MySQL é um software de banco de dados que implementa o padrão SQL (semelhante ao “inglês falado no Reino Unido”).
P: O MySQL é gratuito? Pode ser usado para fins comerciais? R: O MySQL Community Edition é gratuito e de código aberto (sob a licença GPL) e pode ser usado para fins comerciais. No entanto, se você modificar o código-fonte do MySQL e distribuí-lo, também deverá disponibilizá-lo como código aberto. A Oracle oferece uma versão comercial (paga) que fornece recursos empresariais adicionais.
P: O que devo escolher, MySQL ou MariaDB? R: O MariaDB é um fork do MySQL e possui alta compatibilidade de sintaxe com ele. Para novos projetos, o MySQL 8.0 ou versões posteriores é a escolha mais comum; se você tiver dúvidas sobre a estratégia de código aberto da Oracle, o MariaDB é uma boa alternativa.
P: Preciso aprender uma linguagem de programação antes de aprender MySQL? R: Não. O SQL é uma linguagem independente, com sintaxe semelhante ao inglês natural. Você pode aprendê-la diretamente na linha de comando do MySQL. As próximas aulas abordarão como se conectar ao MySQL usando Node.js ou Python.
P: Para projetos de que tamanho o MySQL é adequado? R: O MySQL é adequado para tudo, desde pequenos projetos pessoais até aplicativos corporativos de grande escala. Uma única tabela pode armazenar centenas de milhões de linhas de dados e, com o particionamento de bancos de dados e tabelas, pode suportar escalas ainda maiores. O Meta, o Twitter e o GitHub utilizam o MySQL.
P: O MySQL pode ser usado no Windows, no Mac e no Linux? R: Sim. O MySQL oferece suporte oficial a todas as plataformas. Recomendamos instalá-lo usando o Docker — basta configurá-lo uma vez para executá-lo em qualquer lugar.
📖 Resumo
- Um banco de dados é um repositório destinado a organizar, armazenar e gerenciar dados de acordo com uma estrutura de dados.
- Bancos de dados relacionais armazenam dados na forma de tabelas (linhas e colunas) e permitem relações entre tabelas.
- SQL é a linguagem padrão para a manipulação de bancos de dados relacionais e se divide em cinco categorias: DDL, DML, DQL, DCL e TCL.
- O MySQL é o banco de dados relacional de código aberto mais popular do mundo — é simples, rápido e gratuito.
- MySQL 8.0+ é a versão principal atual, com suporte a novos recursos, como funções de janela, JSON e funções.
- O Docker é a maneira mais fácil de instalar o MySQL
📝 Exercícios
-
Exercício básico (Dificuldade: ⭐): Instale o MySQL 8.0 usando o Docker. Depois de conectado, execute
SELECT VERSION();para verificar o número da versão. -
Problema avançado (Dificuldade ⭐⭐): Crie um banco de dados chamado
schoolque contenha uma tabela chamadastudents(id, nome, idade, série), insira 5 registros e consulte todos os registros. -
Questão de desafio (Dificuldade: ⭐⭐⭐): Crie a tabela
coursese a tabela associadastudent_courses(relação muitos-para-muitos), defina os campos adequados e use um JOIN para consultar todos os cursos cursados por um aluno específico.