SQLite: Principais comandos, dicas, como instalar… (Parte 1)
Oi, hoje trago umas dicas e um tutorial básico para quem tem dificuldades com banco de dados ou está apenas iniciando na área. O banco de dados é muito importante e provavelmente você sempre vai se esbarrar com ele algum dia, então, nada como estar preparado e ter um pouco de controle sobre.
O objetivo deste post é transmitir alguns conceitos básicos sobre o banco de dados SQLite, assim como sua instalação e manipulação. Vou dividir esse post em duas partes até pra não ficar muito extenso e massante a leitura. Espero que curtam. ;)
1)Instalação e Alguns Conceitos do SQLite
O SQLite possui versões para os principais sistemas operacionais do mercado, aqui abordaremos a sua instalação no Windows e Linux, sendo:
Para instalação do SQLite no Windows, basta acessar o site ‘sqlite.org’, ir na aba de download e baixar a melhor versão para o seu sistema. Vale ressaltar para não baixar a versão que tem DDL no nome, que por sua vez é uma “extensão” do SQL. A versão correta para download é a “sqlite-tools”. O processo de instalação é bem simples, basta descompactar e posteriormente acessar o arquivo ‘.exe’ que abrirá o terminal com as linhas de comando. Existe a parte gráfica para trabalhar com o SQLite, que é o SQLite Studio, mas a frente abordaremos a sua instalação também.
Para instalação do SQLite no Linux, basta usar os seguintes comandos no terminal:
sudo apt install sqlite3
sudo apt install sqlite3 libsqlite3-dev
sudo add-apt-repository ppa:linuxgndu/sqlitebrowser
sudo apt install sqlitebrowser
Feito isso, abra o terminal e digite ‘sqlite3’ que abrirá a linha de comando para manipular o banco.
Como dito acima, existem interfaces gráficas para facilitar a manipulação do banco, a que iremos abordar nesse artigo é o SQLite Studio, que além de ser gratuito é um dos mais utilizados. Sua instalação é bem simples, basta acessar “sqlitestudio.pl/index.rvt”, escolher a versão e o sistema operacional desejado e baixar, após a instalação é só descompactar o arquivo e usar. O processo é o mesmo tanto para Linux, quanto para Windows. Caso no Linux o executável não abra o programa, acesse o terminal e dê permissão de execução. Através do terminal, vá a pasta em que está o executável do SQLite Studio e digite o seguinte comando:
sudo chmod +x ‘nome do arquivo’
Com o SQLite Studio devidamente funcionado, conecte o banco que foi criado através das linhas de comando ou crie um novo database no próprio ambiente gráfico.
Existem diferentes tipos de dados no SQLite, os principais são:
NULL / NOTNULL — Como em qualquer outro banco, indica se aquele campo pode ou não ficar vazio.
INTEGER — São os valores inteiros.
REAL — Valores com ponto flutuante.
TEXT — Armazena string usando UTF-8.
Boolean — Não existe uma classe Boolean. Pode-se considerar os inteiros 0 (false) e 1 (true).
O SQLite conta com comandos próprios, para visualizar tabela, pedir ajuda, habilitar o indicador das colunas, dentre outros. Esse comandos só podem ser usados no terminal para uma melhor visualização, coisa que na parte gráfica já se tem. Uma peculiaridade desses comandos são que todos se iniciam com um ponto antes da palavra, sendo eles:
.help — Como o nome já indica, serve para pedir ajuda.
.exit — Sai do ambiente do banco e volta para o usuário normal no terminal.
.schema — Para ver o último comando usado
.header on — Para visualizar o nome das colunas.
.mode column — Exibir os dados na forma de coluna.
.table — Para visualizar as tabelas no banco
2) Principais Comandos
Nesse parte do artigo vamos criar um pequeno banco e vamos trabalhar as principais estruturas usadas no SQL. No shell de comando do banco, todos os comandos devem ser finalizados com ponto e vírgula (;), caso esqueçamos e apertamos enter antes, o interpretador não irá seguir e ficará aguardando o ponto e vírgula para finalizar. Por tanto, nunca se esqueça do ponto e vírgula.
Criação do Banco e Tabela (CREATE TABLE)
$ sqlite3 NomeBanco.db
sqlite> create table NomeTabela(id int primary key, nome text, endereco text)
Para verificar se a tabela realmente foi criada, digite .table
Inserindo Registros (INSERT INTO)
sqlite> insert into NomeTabela (id, nome, endereco) values (1, “pessoa1”, “Rua X”);
Para a inserção de dados é necessário respeitar a ordem em que as colunas estão e dizer em quais se quer adicionar os registros, mas não necessariamente é preciso inserir registros em todos os campos, no exemplo acima eu poderia inserir apenas o id e endereço, assim como para fazer mais de um registro, basta colocar uma vírgula após o parêntese e fazer uma nova query. Ficando assim:
sqlite> insert into NomeTabela (id, nome, endereco) values (1, “pessoa1”, “Rua X”), (2, “pessoa2”, “Rua Y);
Verificando os Registros (SELECT)
sqlite> select * from NomeTabela;
Para uma melhor visualização dessa tabela, podemos ativas o cabeçalho e a exibição por coluna, através dos comandos ‘.header on’ e ‘.mode column’.
O comando select tem uma série de variações, tem como manipular e filtrar bem a query. Usaremos alguns exemplos a seguir.
sqlite> select * from NomeTabela where id = 1;
Na query acima, a clausula ‘where’ atua como um delimitador para a saída do comando, onde somente irá aparecer a informação cujo id for igual a 1. No lugar do * onde retorna tudo, podemos escolher para retornar apenas o nome, ficaria ‘select nome from…’ que iria aparecer apenas a coluna com o nome que atenda o requisito proposto.
sqlite> select * from pessoa where nome like “M%”;
De acordo com a query acima se inserirmos a cláusula ‘like’ juntamente com ‘where’, a saída do nosso comando seria todas as pessoas que se iniciam com a letra “M”, o porcento após a letra indica que todo o resto não é importante, assim retornando todos os nomes com a letra M. Pode-se usar com números também, caso na tabela haja um campo telefone por exemplo, sendo assim ficaria da seguinte forma:
sqlite> select nome, telefone from pessoa where telefone like “9999%”;
A query acima nos retornaria somente o nome e o telefone das pessoas que contenham as iniciais 9999. É importante nos atentarmos a pergunta feita para assim montarmos uma query que satisfaça nossa necessidade.
Caso queiramos ordenar a nossa saída em ordem alfabética, basta utilizar a cláusula ‘order by’ mais o campo que você deseja ordenar, e para ordem decrescente basta acrescentar ‘desc’ ao final, ficando assim:
sqlite> select nome from pessoa order by nome;
sqlite> select nome from pessoa order by nome desc;
Dando continuidade aos nossos exemplos, imaginamos uma tabela onde existem vários registros, mas queremos apenas alguns desses valores em específicos, por exemplo, queremos as informações sobre a Maria, Joao e Pedro. Para esse caso em específico, podemos usar dois métodos, sendo um mais recomendado para mais coisas a se pedir. Usamos o ‘or’ ou ‘in’, ficando assim:
sqlite> select * from pessoa where nome=”Maria” or nome=”Joao” or nome=”Pedro”;
sqlite> select * from pessoa where nome in (“Maria”,”Joao”,”Pedro”);
Na query acima usamos os dois exemplos, o ‘or’ é mais útil quando se tem poucas coisas a serem pedidas, mas se pensarmos em 10 registros distintos, o ‘in’ se encaixa melhor por retornar apenas os valores naquele range pedido. Vale ressaltar que na hora de fazer a query, deve-se atentar na escrita, caso no seu banco esteja inserido o nome “Pedro” e no comando você digitar “pedro”, o campo não será retornado.
Alterando a Tabela (ALTER TABLE)
Acima trabalhamos com alguns exemplos na nossa tabela. Agora vamos alterar o nome da tabela ou até adicionar uma coluna através do comando ‘alter table’. Para mudar um dado contido nessa tabela usaremos outro comando que será visto mais a frente.
O comando para alteração é:
sqlite> alter table NomeTabela rename to NomeTabelaNova;
Agora caso queiramos adicionar uma nova coluna com o nome ‘telefone’ na tabela ou alguma outra coluna caso precise, utilize o comando:
sqlite> alter table NomeTabela add telefone int;
É necessário informar o tipo de dados dessa coluna após o nome, no nosso caso, armazenaremos inteiros.
Atualizando os Dados de Uma Tabela (UPDATE)
Como dito acima, temos como atualizar informações contidas na tabela, mudar um nome ou algum outro campo, isso se reflete apenas aos dados contidos dentro daquela tabela. O comando update também precisa de uma clausula where para indicarmos aonde queremos alterar, se a clausula não for colocada, podemos mudar todos os dados daquela tabela. Suponhamos que no nosso banco na hora da inserção, um nome foi escrito errado, portanto usamos o seguinte comando:
sqlite> update NomeTabela set nome=”Ana” where id=1;
No comando acima indicamos o nome da tabela a qual sofrerá a alteração, falamos o campo a ser alterado que no nosso exemplo foi o campo nome e colocamos o valor a ser substituído, usamos a clausula where para apontarmos para aquele id específico, se não fosse passado isso, todos os nomes seriam alterados.
O comando update também suporta a clausula in para varrermos em um range específico. Suponha-se que em nossa tabela queremos alterar alguns endereços de pessoas distintas, nesse caso usaremos o in como clausula, ficando assim:
sqlite> update NomeTabela set endereco=”Rua Amazonas” where id in (4,6,8);
No exemplo acima atualizamos o endereço para Rua Amazonas das respectivas pessoas que correspondem com o id 4, 6 e 8.
Deletando Dados de Uma Tabela (DELETE)
Para excluir um dado de uma tabela também exite a necessidade de reforçarmos o comando com clausulas, para evitarmos de excluir todo o conteúdo armazenado. Segue o exemplo do comando:
sqlite> delete from NomeTabela where nome=”Ana”;
Acima deletamos o registro contido na tabela, cujo nome seja igual a Ana, para isso usamos a clausula where que já foi explanada em exemplos acima para indicar o dado que se deseja apagar, no exemplo utilizamos em questão o campo nome da tabela, mas é recomendado utilizar o id que é um registro único e não tem como haver duplicidade. Também podemos apagar uma range de dados através do comando delete utilizando a clausula in, no exemplo abaixo utilizaremos o indicador do campo id, ficando assim o comando:
sqlite> delete from NomeTabela where id in (7,8,9);
No exemplo acima deletamos os dados das respectivas pessoas, cujo id for igual a 7, 8 e 9.
Deletando uma Tabela (DROP TABLE)
O comando drop table deleta toda tabela assim como tudo contido nela, portanto é um comando perigoso. Exemplo:
sqlite> drop table NomeTabela;
Galera, essa foi a primeira parte, como disse acima… Não vou estender mais pra não ficar muito massante o post. Mas até semana que vem prometo postar a segunda parte.
Nessa segunda parte vou abordar relacionamento de tabelas e conceitos mais avançados como joins e triggers. Espero que tenham aprendido e gostado, qualquer coisa só perguntar.
Até a próxima. =)