O que é um banco de dados?
Um banco de dados é uma coleção organizada de dados armazenada em um computador para que os programas possam encontrar, incluir, alterar e excluir esses dados de forma rápida e segura. Ele é gerenciado por um software chamado sistema gerenciador de banco de dados (SGBD), como PostgreSQL, MySQL, SQLite ou MongoDB.
Atualizado em 24 de setembro de 2026
Quando você entra em um site, ele precisa encontrar a sua conta entre milhões de outras, conferir a sua senha e carregar as suas configurações, tudo em poucos milissegundos. Ele não abre um arquivo de texto para ler linha por linha. Ele envia uma consulta como SELECT * FROM users WHERE email = 'ana@example.com' para um banco de dados, e o banco de dados vai direto à linha certa usando um índice, muito parecido com o índice remissivo no fim de um livro.
Como um banco de dados funciona
Duas peças trabalham juntas. O banco de dados são os dados, organizados em uma estrutura fixa. O sistema gerenciador de banco de dados (SGBD) é o programa que armazena esses dados em arquivos, os mantém consistentes e responde às solicitações. PostgreSQL, MySQL e SQLite são SGBDs; a sua lista de clientes é o banco de dados.
Em um banco de dados relacional, os dados ficam em tabelas. Cada tabela tem colunas (nome, país, pontos) e linhas (uma por usuário). Uma consulta passa por estes passos:
- O seu programa envia uma consulta, normalmente escrita em SQL (Structured Query Language).
- O SGBD analisa a consulta e planeja como respondê-la: quais tabelas ler e se um índice pode pular a maioria das linhas.
- Ele lê os dados do disco em páginas de tamanho fixo (4.096 bytes por padrão no SQLite, 8 KB no PostgreSQL), mantendo na memória as páginas usadas com frequência.
- Ele filtra, ordena e combina as linhas e depois devolve o resultado.
O Python vem com o SQLite, então você pode executar um banco de dados de verdade aqui mesmo:
Kenji 340
Omar 340
Ana 120
users: 4 average points: 222.5
O programa nunca diz como procurar. Ele descreve o resultado que quer, e o SGBD decide como obtê-lo. Essa é a principal diferença entre consultar um banco de dados e escrever um loop sobre uma lista.
Tipos de banco de dados
| Tipo | Armazena dados como | Exemplos | Uso típico |
|---|---|---|---|
| Relacional (SQL) | Tabelas de linhas e colunas, ligadas por chaves | PostgreSQL, MySQL, SQLite, Oracle, SQL Server | Usuários, pedidos, pagamentos: a maioria das aplicações |
| Documentos | Documentos parecidos com JSON | MongoDB, Firestore, CouchDB | Registros cujos campos variam de um para outro |
| Chave-valor | Um valor buscado por uma chave | Redis, DynamoDB | Caches, sessões, contadores |
| Colunas largas (wide-column) | Linhas com colunas flexíveis espalhadas por muitos servidores | Cassandra, HBase | Volumes de escrita muito altos |
| Grafos | Nós e os relacionamentos entre eles | Neo4j | Redes sociais, recomendações |
| Séries temporais | Medições indexadas pelo tempo | InfluxDB, TimescaleDB | Métricas, leituras de sensores |
| Vetorial | Listas de números (embeddings) | pgvector, Pinecone, Milvus | Busca por similaridade para recursos de IA |
Tudo o que não é relacional costuma ser agrupado como NoSQL. Os bancos relacionais continuam sendo a escolha padrão para a maioria das aplicações, porque tabelas, restrições e SQL resolvem bem uma grande variedade de problemas. Muitos produtos também combinam tipos: o PostgreSQL armazena documentos JSON, e o pgvector acrescenta busca vetorial a ele.
Transações: tudo ou nada
Transferir dinheiro da Ana para o Ben exige duas alterações: somar ao Ben e subtrair da Ana. Se o programa travar entre as duas, aparece dinheiro do nada. Uma transação agrupa alterações para que todas sejam salvas ou nenhuma seja. Aqui a segunda alteração quebra uma regra (um saldo não pode ficar abaixo de zero), então o banco de dados desfaz a primeira também:
transfer 30 done
{'ana': 20, 'ben': 30}
transfer 40 failed: CHECK constraint failed: balance >= 0
{'ana': 20, 'ben': 30}
Os 40 do Ben foram somados e depois retirados, então os totais continuam batendo. Os bancos relacionais prometem quatro propriedades para as transações, conhecidas como ACID: atomicidade (tudo ou nada), consistência (regras como CHECK sempre valem), isolamento (dois usuários executando transações ao mesmo tempo não veem o trabalho pela metade um do outro) e durabilidade (depois de salva, uma alteração sobrevive a um travamento ou a uma queda de energia).
Banco de dados, planilha ou arquivo
| Arquivo de texto ou CSV | Planilha | Banco de dados | |
|---|---|---|---|
| Tamanho | O que o seu programa consegue carregar | 1.048.576 linhas por planilha no Excel | Bilhões de linhas |
| Vários escrevendo ao mesmo tempo | Não | Limitado | Sim, com bloqueios e transações |
| Encontrar um registro | Ler o arquivo inteiro | Filtrar ou pesquisar | Busca por índice |
| Regras sobre os dados | Nenhuma | Validação opcional | Tipos, restrições, chaves estrangeiras |
| Fazer perguntas | Escrever o próprio código | Fórmulas | SQL ou uma API de consulta |
Uma planilha é uma boa ferramenta para uma pessoa olhar alguns milhares de linhas. Quando vários programas ou usuários escrevem dados ao mesmo tempo, ou os dados precisam seguir regras, um banco de dados é a ferramenta certa.
Como os bancos de dados protegem os dados
Um SGBD grava cada alteração em um log antes de mexer nos arquivos de dados (o write-ahead log), então depois de um travamento ele consegue refazer ou desfazer o trabalho inacabado. O PostgreSQL pode guardar um checksum em cada página de 8 KB e informar uma falha de checksum quando um disco com defeito devolve dados danificados. Usuários e permissões decidem quem pode ler ou alterar cada tabela, e a replicação mantém cópias em outros servidores. Os programas também devem passar a entrada do usuário como parâmetros, como os marcadores ? acima, nunca colando essa entrada no texto do SQL, que é como acontecem os ataques de SQL injection.
Equívocos comuns
- "SQL é um banco de dados." SQL é a linguagem. PostgreSQL, MySQL e SQLite são bancos de dados que a entendem.
- "NoSQL significa nenhum SQL." O termo costuma ser lido como "not only SQL" (não só SQL), e vários bancos NoSQL têm linguagens de consulta parecidas com SQL, como a CQL do Cassandra.
- "Um banco de dados é sempre um servidor grande." O SQLite é um único arquivo que um programa abre diretamente, sem servidor nenhum. Ele roda dentro de todo celular Android e iOS.
- "Dados em um banco de dados estão seguros para sempre." Um banco de dados protege contra travamentos, não contra alguém que executa um
DELETEpor engano. Backups continuam sendo necessários.
Próximos passos
O curso de SQL ensina consultas a partir do primeiro SELECT. A documentação de SQLite cobre os passos seguintes: o que é o SQLite, como criar uma tabela, índices e como evitar SQL injection. Para ver como os dados ficam dispostos no disco, leia o que é um byte, e checksum explica como páginas danificadas são detectadas.