Tabela de conteúdo |
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.
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.
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.
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|
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.
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.
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.
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.
--Brivaldo 20h14min de 29 de abril de 2010 (UTC)