Os Bancos Famosos
Quem aprende a dirigir num carro consegue dirigir quase qualquer outro: o volante, o freio e o acelerador ficam no mesmo lugar, mesmo que o painel mude. Com os bancos de dados é parecido. Você já sabe que o programa que cuida do banco se chama SGBD e que todos falam SQL. Nesta aula você vai conhecer os cinco mais famosos (SQLite, MySQL, PostgreSQL, SQL Server e Oracle), entender a grande diferença entre eles e saber por que este guia escolheu o SQLite.
- A diferença entre um banco de arquivo (embutido) e um banco de servidor.
- Quem é quem: SQLite, MySQL e MariaDB, PostgreSQL, SQL Server e Oracle.
- Onde cada um costuma ser usado e qual escolher para cada situação.
- Por que o SQL que você aprende aqui serve nos outros, e onde estão os "sotaques".
- O que acontece quando você usa o jeito de um banco dentro de outro: os erros reais do SQLite.
A ideia: o caderno na mochila e o cartório
Existem duas maneiras bem diferentes de cuidar de um banco de dados:
- O caderno na mochila. A Ana tem um caderno de controle da lojinha que leva para todo lado. Ela mesma abre, lê e escreve. Não depende de ninguém, não precisa marcar horário. Esse é o banco de arquivo: o banco inteiro é um arquivo no computador (ou no celular), e o programa que usa o banco o abre direto, sozinho. O SQLite é assim.
- O cartório. Os registros ficam guardados num prédio, com funcionários no balcão. Muita gente chega ao mesmo tempo, cada uma com uma senha; o cartório confere quem pode ver o quê, atende uma fila enorme e nunca fecha. Esse é o banco de servidor: um programa fica ligado o tempo todo num computador (o servidor), e os outros programas se conectam a ele pela rede, com usuário e senha. MySQL, PostgreSQL, SQL Server e Oracle são assim.
| Banco de arquivo (SQLite) | Banco de servidor (MySQL, PostgreSQL…) | |
|---|---|---|
| Onde ficam os dados | Num arquivo só, como o loja.db | Em arquivos que só o servidor mexe |
| Precisa instalar e ligar um servidor? | Não | Sim, e ele fica ligado o tempo todo |
| Usuário e senha | Não tem: quem abre o arquivo pode ler | Tem, com permissões por usuário |
| Quantos escrevem ao mesmo tempo | Um de cada vez (muitos podem ler) | Muitos, ao mesmo tempo |
| Copiar o banco para outro lugar | Copiar o arquivo | Exportar e importar (ou ferramentas próprias) |
| Bom para | Aplicativos, celulares, programas, estudo, sites pequenos | Sites e sistemas com muitos usuários, empresas |
Nenhum dos dois é "melhor". Ninguém leva um cartório na mochila, e ninguém registra os imóveis de uma cidade num caderno. Cada um serve para uma coisa.
1. SQLite: o banco que está em todo lugar
O SQLite é o banco de arquivo mais usado do mundo, e o deste guia. O site oficial (sqlite.org) o descreve como um motor de banco de dados SQL "autossuficiente, sem servidor e sem configuração": um banco completo, com todas as tabelas, cabe num arquivo só, e o código é de domínio público, livre para qualquer uso, comercial ou pessoal.
Você usa o SQLite todos os dias sem saber. Segundo o próprio projeto, ele está em todo celular Android, todo iPhone, todo Mac, toda instalação do Windows 10 e 11, nos navegadores Firefox, Chrome e Safari, em televisores e nas centrais multimídia de carros. A conta do site: mais de um trilhão de bancos SQLite em uso. Os contatos e as mensagens do seu celular, muito provavelmente, estão num banco SQLite.
E está aqui também: o editor deste guia roda um SQLite de verdade dentro do seu navegador. Pergunte a ele a versão:
SELECT sqlite_version();
- sqlite_version()
- Uma função do SQLite: um comando pronto que devolve um valor. Esta devolve a versão do motor. Os parênteses vazios dizem "rode a função, sem nada dentro".
- 3.50.4
- A versão do SQLite do guia: a mesma no editor e no terminal da Ana, por isso todo resultado das aulas bate. O 3 é a "geração" do SQLite (a mesma desde 2004), o 50 é a versão, e o 4 é a quarta correção dessa versão.
- Pontos fortes: nada para instalar ou configurar, um arquivo só, rápido, confiável, gratuito para tudo.
- Limites: uma escrita de cada vez; não tem usuários e senhas; não é feito para servir, sozinho, um site gigante com milhares de pessoas gravando ao mesmo tempo.
2. MySQL e MariaDB: os bancos dos sites
O MySQL é o banco de servidor mais conhecido da web. Nasceu na Suécia nos anos 1990, ficou famoso junto com o PHP e hoje pertence à Oracle. Tem uma versão gratuita e de código aberto, a Community. Se você contratar uma hospedagem de site barata, quase certamente vai ganhar um MySQL de brinde: o WordPress, por exemplo, guarda os posts num banco MySQL (ou MariaDB).
O MariaDB é um "irmão" do MySQL, criado por desenvolvedores originais do MySQL, entre eles Michael "Monty" Widenius. O projeto se apresenta como um substituto direto do MySQL ("drop-in replacement") e promete continuar sempre livre, sob a licença GPLv2. No dia a dia, o SQL dos dois é praticamente o mesmo.
- Pontos fortes: muito usado, fácil de achar em hospedagens, muita documentação e muita gente que sabe usar.
- Onde você vai encontrar: sites, lojas virtuais, blogs, sistemas em PHP.
3. PostgreSQL: o mais completo dos livres
O PostgreSQL (fala-se "póst-grés-quiu-él"; o apelido é Postgres) é um banco de servidor livre e gratuito, mantido por uma comunidade, sem dono. É famoso por seguir de perto o SQL padrão e por ter recursos avançados: tipos de dados variados, JSON, buscas de texto, extensões para mapas. Na data deste guia, a versão atual é a 18.
- Pontos fortes: completo, segue o padrão, confiável, gratuito até para grandes empresas.
- Onde você vai encontrar: startups, sistemas de empresas, governos, aplicativos com servidor próprio.
4. SQL Server: o banco da Microsoft
O Microsoft SQL Server é o banco de servidor da Microsoft. O SQL dele tem até nome próprio, T-SQL (Transact-SQL), com vários sotaques. É pago para uso em empresas, mas tem edições gratuitas para estudo e para sistemas pequenos. Roda no Windows e também no Linux, e existe em versão na nuvem (o Azure SQL).
- Pontos fortes: integrado aos produtos da Microsoft (Windows, Excel, Power BI, .NET), ferramentas gráficas caprichadas.
- Onde você vai encontrar: empresas que usam Windows e programas da Microsoft, bancos, indústrias.
5. Oracle Database: o veterano das grandes empresas
O Oracle Database é o banco comercial mais antigo da lista, da empresa Oracle (a mesma que hoje é dona do MySQL e do Java). É pago e caro, com uma edição gratuita para aprender. O SQL dele também tem nome, PL/SQL, quando se escrevem programas dentro do banco.
- Pontos fortes: feito para sistemas enormes que não podem parar: bancos, companhias aéreas, operadoras de telefone, governos.
- Onde você vai encontrar: grandes corporações, quase sempre com uma equipe só para cuidar do banco.
Lado a lado, e qual usar
| Banco | Tipo | De quem | Custo | Uso típico |
|---|---|---|---|---|
| SQLite | Arquivo (embutido) | Projeto SQLite | Grátis, domínio público | Celulares, aplicativos, navegadores, estudo, sites pequenos |
| MySQL | Servidor | Oracle | Versão Community grátis; versões pagas | Sites, lojas virtuais, PHP |
| MariaDB | Servidor | Comunidade MariaDB | Grátis (GPLv2) | O mesmo do MySQL |
| PostgreSQL | Servidor | Comunidade | Grátis | Sistemas de empresas, startups, dados com mapas e JSON |
| SQL Server | Servidor | Microsoft | Pago; edições grátis para estudo e uso pequeno | Empresas no mundo Microsoft |
| Oracle | Servidor | Oracle | Pago; edição grátis para aprender | Grandes corporações |
| Se você quer… | Comece com |
|---|---|
| Aprender SQL sem instalar servidor nenhum | SQLite (é o que este guia faz) |
| Guardar dados dentro de um aplicativo de celular ou de computador | SQLite |
| Fazer um site numa hospedagem comum, ou mexer com WordPress | MySQL ou MariaDB |
| Um sistema novo, com servidor, que vai crescer | PostgreSQL |
| Trabalhar numa empresa que usa os produtos da Microsoft | SQL Server |
| Trabalhar numa grande corporação ou num banco | Provavelmente Oracle ou SQL Server |
Para aprender, ele é perfeito: instala em um minuto (próxima aula, Instalar o SQLite), o banco da loja é um arquivo que você pode copiar e apagar à vontade, e ele roda até dentro do navegador, no editor das aulas. E o SQL dele segue o padrão: tudo o que você aprender aqui, você leva para o MySQL, o PostgreSQL ou o SQL Server, com poucos ajustes. Quando houver diferença, as aulas avisam numa caixa "Nos outros bancos".
6. O mesmo SQL em todos
A consulta abaixo roda igualzinha no SQLite, no MySQL, no MariaDB, no PostgreSQL, no SQL Server e no Oracle. É o "volante e pedais" do SQL:
SELECT nome, cargo FROM funcionarios WHERE cargo = 'Gerente';
A gerente da Loja Aurora é a Marta Lustosa, e qualquer um dos seis bancos daria a mesma resposta, se tivesse as mesmas tabelas. As diferenças aparecem nas bordas: em funções, em alguns comandos e nas ferramentas de cada um. Três exemplos que você vai ver de novo pelo guia (os trechos dos outros bancos são ilustrativos: não rodam no SQLite, por isso não têm quadro de resultado):
| O que fazer | SQLite | MySQL / MariaDB | PostgreSQL | SQL Server |
|---|---|---|---|---|
| Ver a versão | SELECT sqlite_version(); | SELECT VERSION(); | SELECT version(); | SELECT @@VERSION; |
| Só as 3 primeiras linhas | … LIMIT 3 | … LIMIT 3 | … LIMIT 3 | SELECT TOP (3) … |
| Listar as tabelas | .tables (no terminal sqlite3) | SHOW TABLES; | \dt (no terminal psql) | SELECT name FROM sys.tables; |
Fontes: manuais oficiais do MySQL (VERSION(), SHOW TABLES), do PostgreSQL (version()) e do SQL Server (@@VERSION, TOP).
Experimente: a consulta mostra todos os funcionários e os seus cargos. Acrescente a linha WHERE cargo = 'Gerente' antes do ponto e vírgula para ficar só com a gerente, como no exemplo acima. Depois, por curiosidade, troque 'Gerente' por 'Vendedora'.
SELECT nome, cargo FROM funcionarios;
SELECT nome, cargo FROM funcionarios WHERE cargo = 'Gerente';
Quando dá errado
O erro mais comum de quem copia exemplos da internet: o exemplo era de outro banco. O SQLite não entende o sotaque dos outros e reclama. As mensagens abaixo são as reais.
TOP do SQL Server
SELECT TOP 3 nome FROM produtos;
O que aconteceu: near "3": syntax error. O SQLite não conhece TOP; ele achou que TOP fosse o nome de uma coluna e se perdeu logo depois, no 3. Por isso a mensagem aponta o número, e não a palavra TOP.
Como consertar: no SQLite, o limite vai no fim: SELECT nome FROM produtos LIMIT 3;.
SELECT version();
O que aconteceu: no such function: version, "não existe a função version". O SQLite tem a sua: sqlite_version().
@@VERSION do SQL Server
SELECT @@VERSION;
O que aconteceu: unrecognized token: "@", "símbolo não reconhecido". Para o SQLite, aquele @ nem é uma palavra que ele conheça; o erro acontece antes até de entender a frase.
SHOW TABLES do MySQL
SHOW TABLES;
O que aconteceu: near "SHOW": syntax error. O SQLite não tem o comando SHOW. Para listar as tabelas no terminal do SQLite existe o comando .tables, que você vai usar em Comandos de Ponto.
Missão: a Ana achou esta consulta num site sobre SQL Server e ela dá erro no SQLite. Reescreva no jeito do SQLite, para mostrar os nomes dos 3 primeiros produtos.
SELECT TOP 3 nome FROM produtos;
SELECT nome FROM produtos LIMIT 3;
Moral: quando um exemplo da internet não funcionar, veja para qual banco ele foi escrito. Uma busca como "LIMIT no SQL Server" ou "SHOW TABLES no SQLite" resolve quase sempre. As diferenças têm um grupo inteiro de aulas no Nível 3: As Diferenças entre os Bancos, SQL no MySQL e MariaDB, SQL no PostgreSQL e SQL no SQL Server.
Referência rápida
| Termo | O que é |
|---|---|
| Banco de arquivo (embutido) | O banco é um arquivo; o programa o abre direto, sem servidor (SQLite) |
| Banco de servidor (cliente-servidor) | Um programa fica ligado num computador e atende conexões pela rede, com usuário e senha |
| Servidor | O computador (ou o programa) que fica ligado atendendo pedidos |
| Cliente | O programa que se conecta ao servidor para fazer pedidos |
| Código aberto, livre | O código do programa é público e pode ser usado e modificado |
| Domínio público | Sem dono nenhum: qualquer um usa para qualquer coisa (o caso do SQLite) |
| T-SQL, PL/SQL | Os nomes do SQL "com sotaque" do SQL Server e do Oracle |
| Dialeto | O jeito particular de cada banco falar SQL |
Exercícios
1. A versão
Complete o nome da função que mostra a versão do SQLite:
2. O limite
No SQLite, complete a palavra que limita o resultado às 5 primeiras linhas:
3. Qual é a grande diferença do SQLite para o MySQL e o PostgreSQL?
4. Um site com milhares de pessoas comprando ao mesmo tempo, cada vendedor com o seu usuário e senha. Qual tipo de banco combina mais?
5. A Ana rodou SELECT version(); no SQLite e recebeu no such function: version. Por quê?
6. Qual afirmação é verdadeira?
Missão final: a versão e as vendedoras
Missão: o código abaixo foi escrito para o PostgreSQL e dá erro aqui. Faça duas coisas: troque a função de versão pela do SQLite, e, no segundo comando, troque o cargo para mostrar só as funcionárias com o cargo Vendedora. Os dois resultados devem aparecer, um embaixo do outro.
SELECT version(); SELECT nome, cargo FROM funcionarios WHERE cargo = 'Gerente';
SELECT sqlite_version(); SELECT nome, cargo FROM funcionarios WHERE cargo = 'Vendedora';
Resumo
- Há dois tipos de banco: de arquivo (o banco é um arquivo, sem servidor: o SQLite) e de servidor (um programa sempre ligado atende muita gente pela rede, com usuário e senha: MySQL, MariaDB, PostgreSQL, SQL Server, Oracle).
- SQLite: domínio público, um arquivo só, está em todo celular e navegador. É o deste guia, versão 3.50.4.
- MySQL (da Oracle) e o irmão MariaDB: os bancos dos sites. PostgreSQL: livre, completo e fiel ao padrão. SQL Server: o da Microsoft. Oracle: o das grandes corporações.
- O SQL básico é o mesmo em todos. As diferenças estão nas bordas:
LIMIT×TOP,sqlite_version()×version()×@@VERSION,.tables×SHOW TABLES. - Exemplo da internet deu
syntax errorouno such function? Veja se ele não foi escrito para outro banco.