SQLite es un motor de base de datos formado por una librería de lenguaje C que normalmente guarda los datos en un fichero.
sqlite3 es el intérprete de comandos de la versión 3 de SQLite.
Instalar y abrir un fichero de base de datos
Instalar sqlite3 (en Debian):
$ sudo aptitude install sqlite3Abrir el fichero de base de datos:
$ sqlite3 database_file.dbSQLite version 3.8.8.3 2015-02-25 13:29:11
Enter ".help" for usage hints.
Aparece un prompt del intérprete de comandos:
sqlite>
Comandos de SQLite3
Mostrar todas las tablas:
sqlite> .tablesNOMBRES CLIENTES VENTAS PRODUCTOS
Terminar:
sqlite> .quitMostrar la ayuda:
sqlite> .help.backup ?DB? FILE Backup DB (default "main") to FILE
.bail on|off Stop after hitting an error. Default OFF
.clone NEWDB Clone data into NEWDB from the existing database
.databases List names and files of attached databases
.dump ?TABLE? ... Dump the database in an SQL text format
If TABLE specified, only dump tables matching
LIKE pattern TABLE.
.echo on|off Turn command echo on or off
....
Mostrar la lista de todas las bases de datos y sus ficheros asociados:
sqlite> .databasesMostrar el esquema de todas las tablas:
sqlite> .schemaMostrar el esquema de una tabla:
sqlite> .schema PRODUCTOSCREATE TABLE "PRODUCTOS" (Id INTEGER PRIMARY KEY AUTOINCREMENT ,TStamp INTEGER NOT NULL ,Name VARCHAR(60) NOT NULL ,Price DECIMAL(10,5) NOT NULL);
Ejecutar un comando de UNIX:
sqlite>.system ls -lTipos de datos de SQLite
SQLite usa tipos de datos dinámicos. Éstos son los tipos que podremos utilizar:
NULL: un valor nulo.
INTEGER: un entero con signo, almacenado mediante 1, 2, 3, 4, 6 u 8 bytes dependiendo de la magnitud del valor.
REAL: un valor de coma flotante, almacenado como un número de coma flotante IEEE de 8 bytes.
TEXT: una cadena de texto, almacenado usando la codificación (UTF-8, UTF-16BE ó UTF-16LE).
BLOB: un BLOB de datos (Binary Large OBject), almacenado exactamente cómo se introdujo.
Tipos de datos in SQLite3
Otros tipos como VARCHAR(N), DECIMAL(N, M) son asimilados a los tipos de datos anteriores basándose en su afinidad (VARCHAR a TEXT, DECIMAL a INTEGER), por lo que los límites (N, M..) no son tenidos en cuenta.
SQL
Asociar la base de datos (clientes) de otro fichero (clientes.db):
sqlite> ATTACH DATABASE 'clientes.db' AS clientes;Ahora el comando .database muestra también la base de datos clientes.
Podemos acceder a las tablas de la base de datos clientes mediante el prefijo 'clientes.'
Desasocia una base de datos previamente asociada:
sqlite> DETACH DATABASE clientes;Crear una nueva tabla:
sqlite> CREATE TABLE VARS (name VARCHAR(128) PRIMARY KEY ,value VARCHAR(512) NOT NULL);Crear una tabla sólo si no existe previamente:
sqlite> CREATE TABLE IF NOT EXISTS VARS (name VARCHAR(128) PRIMARY KEY ,value VARCHAR(512) NOT NULL);Muestra el contenido de una tabla:
sqlite> select * from CLIENTS; 1|Vincent
2|John
Muestra el contenido de una tabla limitando el número de filas en el resultado:
sqlite> select * from CLIENTS LIMIT 3Muestra como mucho tres filas.
La palabra clave LIMIT pude usarse junto con ORDER BY para especificar la columna según la cual ordenar los resultados.
sqlite> select * from CLIENTS ORDER BY Name DESC LIMIT 3Borrar una tabla:
sqlite> drop table ticket;Renombrar una tabla:
sqlite> .tablesCASHIER
sqlite> alter table CASHIER rename to CLIENTS;
sqlite> .tablesCLIENTS
Copiar el contenido de una tabla en otra:
sqlite> INSERT INTO CLIENT SELECT * FROM CLIENT_OLD;Las columnas que devuelve el select han de coincidir con los elementos que espera el comando insert.
SQL As Understood By SQLite (Insert)
Copiar parte del contenido de una tabla en otra:
sqlite> INSERT INTO CLIENT (name,value,state,address) SELECT name,value,-1,address FROM CLIENT_OLD;Insertar una columna en una tabla, pero si aparece un conflicto debido a una limitación UNIQUE o PRIMARY KEY (clave primaria) entonces reemplazar la columna:
sqlite> INSERT OR REPLACE INTO VARS (name,value) VALUES('color', 'blue');SQL As Understood By SQLite (On conflict)
Añadir una nueva columna a una tabla
Vamos a añadir la columna Difficulty a esta tabla:
sqlite> .schema ANALUXCREATE TABLE ANALUX (Height INTEGER PRIMARY KEY ,Price REAL DEFAULT NULL);
El comando "alter" añade la nueva columna:
sqlite> ALTER TABLE ANALUX ADD Difficulty REAL DEFAULT NULL;sqlite> .schema ANALUXCREATE TABLE ANALUX (Height INTEGER PRIMARY KEY ,Price REAL DEFAULT NULL ,Difficulty REAL DEFAULT NULL);
Si queremos rellenar la columna Difficult con data procedente de otra tabla. p.ej: BLOCK donde Height es la clave primaria para las dos tablas:
sqlite> UPDATE ANALUX SET Difficulty = (SELECT Difficulty FROM BLOCK WHERE BLOCK.Height = ANALUX.Height);TRANSACCIONES
Comenzar una transacción:
sqlite>BEGINEjecutar algunas operaciones...
Hacer commit de la transacción:
sqlite>COMMITSi algo va mal podemos deshacer la transacción en lugar de hacer commit.
sqlite>ROLLBACKEjecutar un comando SQL en la línea de comandos
Insertar una fila en una tabla:
(Notar que tenemos que escapar las dobles comillas)
$ sqlite3 foo.db "INSERT INTO CASHIER VALUES (\"foo\",\"bar\");"Ejecutar un script de SQL en la línea de comandos
Si ejecutamos un script SQL en un fichero de nombre example.sql como éste:
CREATE TABLE CASHIER (name VARCHAR(10) PRIMARY KEY ,pass VARCHAR(10) NOT NULL);
INSERT INTO CASHIER VALUES ("foo","bar");
SELECT * FROM CASHIER;Podemos ejecutarlo:$ sqlite3 foo.db example.sql O usando un here documento(documento insertado en el script) en un shell script:
P.ej: fichero example.sh
#!/bin/bash sqlite3 foo.dbEntonces lo ejecutamos:EOF CREATE TABLE CASHIER (name VARCHAR(10) PRIMARY KEY ,pass VARCHAR(10) NOT NULL); INSERT INTO CASHIER VALUES ("foo","bar"); SELECT * FROM CASHIER; EOF
$ bash example.shMostrar el tiempo de ejecución de una query (consulta)
El comando .timer muestra el tiempo de ejecución de una consulta. ON para activarlo y OFF para desactivarlo.
sqlite> .timer ONsqlite> SELECT * FROM CASHIER; ... Run Time: real 0.326 user 0.000523 sys 0.000261
Para desactivarlo:
sqlite> .timer OFFExplicar una query SQL
Podemos obtener una descripción de alto nivel de cómo se ejecuta internamente una consulta SQL.
https://www.sqlite.org/eqp.html
Añadimos EXPLAIN QUERY PLAN al comienzo de la query:
sqlite> EXPLAIN QUERY PLAN SELECT * FROM ADDRESS;QUERY PLAN `--SCAN TABLE ADDRESS
REFERENCIA
SQLite core functions
SQLite Frequently Asked Questions
SQLite Command Line Interface
Traducido de:
SQLite3 Cheat Sheet
No hay comentarios:
Publicar un comentario