É sempre bom ter tudo que você precisa de forma rápida e simples.
Escrevi este post para um mini tutorial de SQLite3. Através do terminal:
Criando uma tabela
Criando um banco de dados.
A Ajuda.
Criando a tabela clientes.
…> id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
…> Nome VARCHAR(100) NOT NULL,
…> CPF VARCHAR(11) NOT NULL,
…> Email VARCHAR(20) NOT NULL,
…> Fone VARCHAR(20),
…> UF VARCHAR(2) NOT NULL
…> );
Nota: Se usamos AUTOINCREMENT não precisamos do NOT NULL.
…> id INTEGER PRIMARY KEY AUTOINCREMENT,
…> …
Visualizando o código SQL que criou a tabela.
Visualizando todas as tabelas existentes.
Saindo do SQLite3.
CRUD
Abra um editor de texto e salve um arquivo com o nome inserirdados.sql.
E digite a inserção de alguns dados.
INSERT INTO clientes VALUES(2, ‘Abigail’, ‘11111111111’, ‘abigail@email.com’, ‘1112345678’, ‘RJ’);
INSERT INTO clientes VALUES(3, ‘Benedito’, ‘22222222222’, ‘benedito@email.com’, ‘1187654321’, ‘SP’);
INSERT INTO clientes VALUES(4, ‘Zacarias’, ‘33333333333’, ‘zacarias@email.com’, ‘1199999999’, ‘RJ’);
Nota: No caso do INSERT INTO não precisamos numerar, basta trocar o número do id por NULL, exemplo:
Importe estes comandos no sqlite.
Abra o SQLite3 novamente, e visualize os dados.
sqlite> SELECT * FROM clientes;
Você pode exibir o nome das colunas digitando
Para escrever o resultado num arquivo externo digite
sqlite> SELECT * FROM clientes;
sqlite> .exit
$ cat resultado.txt
Adicionando uma nova coluna na tabela clientes.
No SQLite3 os valores para boolean são 0 (falso) e 1 (verdadeiro).
Visualizando as colunas da tabela clientes.
Alterando os valores do campo bloqueado.
sqlite> UPDATE clientes SET bloqueado=1 WHERE id=1; — Atualiza apenas o registro com id=1 para Verdadeiro.
sqlite> UPDATE clientes SET bloqueado=1 WHERE UF=‘RJ’; — Atualiza para Verdadeiro todos os registros com UF=’RJ’.
Faça um SELECT novamente para ver o resultado.
Deletando registros.
Cuidado: se você não usar o WHERE e escolher um id você pode deletar todos os registros da tabela.
Você pode exibir os dados na forma de coluna.
Backup
$ cat clientes.sql
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE clientes(
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
Nome VARCHAR(100) NOT NULL,
CPF VARCHAR(11) NOT NULL,
Email VARCHAR(20) NOT NULL,
Fone VARCHAR(20),
UF VARCHAR(2) NOT NULL
);
INSERT INTO “clientes” VALUES(1,‘Regis’,‘00000000000’,‘rg@email.com’,‘1100000000’,‘SP’);
INSERT INTO “clientes” VALUES(2,‘Abigail’,‘11111111111’,‘abigail@email.com’,‘1112345678’,‘RJ’);
INSERT INTO “clientes” VALUES(3,‘Benedito’,‘22222222222’,‘benedito@email.com’,‘1187654321’,‘SP’);
INSERT INTO “clientes” VALUES(4,‘Zacarias’,‘33333333333’,‘zacarias@email.com’,‘1199999999’,‘RJ’);
COMMIT;
Pronto, se corromper o seu banco de dados, você pode recuperá-lo:
$ sqlite3 Clientes_recuperado.db < clientes.sql
$ sqlite3 Clientes_recuperado.db ‘SELECT * FROM clientes;’
Faça um SELECT novamente para ver o resultado do novo banco de dados.
Relacionando tabelas
Todos devem saber que num banco de dados relacional a chave estrangeira ou FOREIGN KEY tem um papel importante no relacionamento entre duas tabelas. Veremos aqui como relacionar duas tabelas.
Primeiros façamos um backup do nosso bd.
Apenas para relembrar, vamos ver qual é a nossa tabela…
sqlite> .tables
clientes
sqlite> .header on
sqlite> .mode column
E quais são seus registros.
———- ———- ———– ———— ———- ———- ———-
1 Regis 00000000000 rg@email.com 1100000000 SP 1
2 Abigail 11111111111 abigail@emai 1112345678 RJ 1
3 Benedito 22222222222 benedito@ema 1187654321 SP 0
Então vamos criar duas novas tabelas: cidades e clientes_novo.
…> id INTEGER PRIMARY KEY AUTOINCREMENT,
…> cidade TEXT,
…> uf VARCHAR(2)
…> );
…> CREATE TABLE clientes_novo(
…> id INTEGER PRIMARY KEY AUTOINCREMENT,
…> Nome VARCHAR(100) NOT NULL,
…> CPF VARCHAR(11) NOT NULL,
…> Email VARCHAR(20) NOT NULL,
…> Fone VARCHAR(20),
…> bloqueado BOOLEAN,
…> cidade_id INTEGER,
…> FOREIGN KEY (cidade_id) REFERENCES cidades(id)
…> );
Segundo Sqlite Drop Column, não tem como “deletar” uma coluna, então precisamos criar uma nova tabela clientes_novo com os campos que precisamos e copiar os dados da primeira tabela para esta.
…> SELECT id, Nome, CPF, Email, Fone, bloqueado FROM clientes;
Veja que selecionamos os campos da tabela clientes e a inserimos em clientes_novo. Note que não copiamos o campo UF porque agora ele é da tabela cidades.
Agora podemos deletar a tabela “antiga”.
E renomear a nova tabela.
Veja o resultado da nova tabela.
———- ———- ———– ———— ———- ———- ———-
1 Regis 00000000000 rg@email.com 1100000000 1
2 Abigail 11111111111 abigail@emai 1112345678 1
3 Benedito 22222222222 benedito@ema 1187654321 0
Agora você terá que popular as cidades e definir a cidade_id em cada cliente. Lembrando que a chave é AUTOINCREMENT, então use NULL.
sqlite> INSERT INTO cidades VALUES (NULL,‘Sao Paulo’,‘SP’);
sqlite> INSERT INTO cidades VALUES (NULL,‘Rio de Janeiro’,‘RJ’);
Veja os registros da tabela cidades.
———- ———- ———-
1 Campinas SP
2 Sao Paulo SP
3 Rio de Jan RJ
Agora precisamos atualizar a cidade_id de cada cliente.
sqlite> UPDATE clientes SET cidade_id = 1 WHERE id = 2;
sqlite> UPDATE clientes SET cidade_id = 2 WHERE id = 3;
Resultado.
———- ———- ———– ———— ———- ———- ———-
1 Regis 00000000000 rg@email.com 1100000000 1 3
2 Abigail 11111111111 abigail@emai 1112345678 1 1
3 Benedito 22222222222 benedito@ema 1187654321 0 2
Façamos um INNER JOIN para visualizar todos os dados, inclusive a cidade e o uf.
———- ———- ———– ———— ———- ———- ———- ————– —
1 Regis 00000000000 rg@email.com 1100000000 1 3 Rio de Janeiro RJ
2 Abigail 11111111111 abigail@emai 1112345678 1 1 Campinas SP
3 Benedito 22222222222 benedito@ema 1187654321 0 2 Sao Paulo SP
Referências
Introduction to Foreign Key Constraints
Making Other Kinds Of Table Schema Changes
Leia também sobre SQLite3 e Python.
Este artigo foi importado automaticamente por fazer parte do Planetário Dev. Quer fazer parte deste HUB de conteúdos? Faça parte do Planetário e veja as vantagens.
Não tem site ou blog? Seja um autor do site e ainda pode ser remunerado.
Leia também: