SQLite3

De Biblioteca Unix

Conteúdo

SQLite3

Debian 6.0/Ubuntu 10.04 LTS

Pacotes necessários

Primeiro vamos instalar o programa no nosso computador

# apt-get install sqlite3

feito isso já podemos começar a trabalhar com nossas bases em SQLite.

Treinamento Rápido

Para criar um arquivo de banco de dados, basta rodarmos o comando sqlite3 seguido do nome do banco de dados, veja a sintaxe

sqlite3 nome

vamos criar um banco simples para usar durante nosso aprendizado:

# sqlite3 banco.db

SQLite version 3.5.9
Enter ".help" for instructions
sqlite>

pronto, agora nosso ambiente está pronto para uso.

Criando uma tabela

Podemos tanto usar este ambiente de forma iterativa como vemos agora (para sair basta digitar: .q, .quit ou .exit) ou diretamente via linhas de comando:

# sqlite3 banco.db "create table t1 (chavet1 INTEGER PRIMARY KEY,
                                           dados TEXT,num double,
                                           tempoEntrada DATE);"

lembrando que os comandos são executas entre aspas duplas. Durante o aprendizado vamos usar o modo iterativo por ser mais interessante.

Inserindo Tuplas

Agora é hora de inserir algumas tuplas no nosso banco para que possamos trabalhar em cima dele:

sqlite> insert into t1 (dados,num) values ('Este e um exemplo simples de dado',3);
sqlite> insert into t1 (dados,num) values ('Outro exemplo simples de dado',7);
sqlite> insert into t1 (dados,num) values ('E um pouco mais',12);


como experado, se executarmos um select nos dados vai retornar o que inserimos na tabela. Note que a chave primária chavet1 é auto incrementada, contudo não existem valores padrões para tempoEntrada, neste caso vamos usar triggers.

sqlite> select * from t1;
1|Este e um exemplo simples de dado|3.0|
2|Outro exemplo simples de dado|7.0|
3|E um pouco mais|12.0|

Mostrando Tabelas

Para mostrar as tabelas que estão criadas no seu banco basta usar o comando: .table

sqlite> .table
t1

se existissem outras tabelas, estas seriam mostradas.

Realizando Dump do banco

Para realizarmos um Dump do seu banco em um script, podemos usar os comandos diretamente via linha de comando, um exemplo seria:

# sqlite3 banco.db ".dump"
BEGIN TRANSACTION;
CREATE TABLE t1 (chavet1 INTEGER PRIMARY KEY,
                                           dados TEXT,num double,
                                           tempoEntrada DATE);
INSERT INTO "t1" VALUES(1,'Este e um exemplo simples de dado',3.0,NULL);
INSERT INTO "t1" VALUES(2,'Outro exemplo simples de dado',7.0,NULL);
INSERT INTO "t1" VALUES(3,'E um pouco mais',12.0,NULL);
COMMIT;

este resultado poderia ser redirecionado para um arquivo, por exemplo.

Triggers

Para que o campo tempoEntrada possa ser adicionado toda vez que inserirmos uma tupla se faz necessário criar uma trigger e definir o formato que a entrada vai conter, que por padrão é definido para o UTC (Coordinated Universal Time). Vamos criar uma trigger simples:

sqlite> create trigger insert_t1_tempoEntrada AFTER INSERT ON t1
  ...> BEGIN
  ...>  UPDATE t1 SET tempoEntrada = DATETIME('now') WHERE rowid=new.rowid;
  ...> END;

feito isso toda entrada que fizermos agora, ele vai AFTER (depois) de inserir, já atualizar o campo tempoEntrada que estava vazio para a hora da inserção. Por exemplo:

sqlite> insert into t1 (dados,num) values ('Primeira entrada com tempoEntrada',15);

vamos checar se a trigger realmente funcionou:

sqlite> select * from t1;
1|Este e um exemplo simples de dado|3.0|
2|Outro exemplo simples de dado|7.0|
3|E um pouco mais|12.0|
4|Primeira entrada com tempoEntrada|15.0|2010-04-29 18:59:00

podemos ver que a última entrada já possui o campo tempoEntrada e agora com a data já inserida.

UTC e Localtime

Note que executar o comando:

sqlite> select DATETIME('NOW')

teremos como resposta a hora UTC, para retornar a hora local:

sqlite> select DATETIME('NOW','localtime')

Inserir horários em UTC com a trigger sugerida tem algumas vantagens, pois pode ser facilmente convertida no horário local, por exemplo:

sqlite> select chavet1, dados, num, tempoEntrada  from t1 where chavet1=4 ;
4|Primeira entrada com tempoEntrada|15.0|2010-04-29 18:59:00

sqlite> select chavet1, dados, num, DATETIME(tempoEntrada,'localtime')  from t1 where chavet1=4 ;
4|Primeira entrada com tempoEntrada|15.0|2010-04-29 14:59:00

note que quando imposta a regra ao DATETIME de localtime ele transforma o horário UTC para o mesmo horário relacionado ao local.


Referências


--Brivaldo 20h14min de 29 de abril de 2010 (UTC)

Ferramentas pessoais