En esta entrada vamos a ver cómo instalar la base de datos relacional SQLite, además de tratar con sus operaciones básicas. Lo cierto es que SQLite ha sido protagonista como actor secundario en muchas entradas de la web, durante todos estos años, por lo que ya era hora de dedicarle una entrada en exclusiva.



Para quien no la conozca se trata de una base de datos relacional, quizás una de las más utilizadas. Seguramente esta popularidad es debido a sus características únicas e inusuales, que la diferencian de otras a priori más potentes como MySQL, PostgreSQL, MS SQL Server u Oracle.

En esta entrada veremos su instalación en un sistema operativo GNU/Linux con Ubuntu 18.04, que es actualmente la versión LTS de la popular distribución sudafricana. En principio los pasos deberían ser similares para sistemas con paquetería APT, como Debian o Linux Mint.

Pero vayamos por partes…

¿Qué es SQLite? ¿Para qué sirve?

Se trata de un sistema de gestión de bases de datos relacional, con la intención de ser minimalista. Está escrito en C y es un proyecto de dominio público, por lo que se puede utilizar libremente.

Una de sus diferencias principales frente a otros sistemas de gestión de base de datos cliente-servidor, es que su motor no es un proceso independiente con el que el programa principal se comunica. En su lugar la biblioteca SQLite se enlaza con el programa pasando a ser parte integral del mismo. El programa utiliza la funcionalidad de SQLite a través de llamadas simples a subrutinas y funcionales. Esto hace que se reduzca la latencia en el acceso a la base de datos, debido a que las llamadas a funciones son más eficientes que la comunicación entre procesos. El conjunto de la base de datos, esto es, las definiciones, tablas, índices y los propios datos, son guardados como un solo ficheros estándar en la máquina host anfitrión. Esto se logra bloqueando todo el fichero de base de datos al principio de cada transacción.

En la versión 3 de SQLite se permiten base de datos de hasta 2 Terabytes, además de permitir campos tipo BLOB.

Mozilla Firefox, Clementine, Skype o XBMC, por mencionar algunos proyectos, utilizan este gestor de base de datos.



Instalación de SQLite en Ubuntu 18.04

Su instalación es bien sencilla, ya que vamos a utilizar los repositorios de la distribución:

1 2 $ sudo apt update $ sudo apt install sqlite3 $ sudo apt update $ sudo apt install sqlite3

Para llamar a la aplicación sólo hemos de escribir “sqlite3” en la consola de comandos:

1 2 3 4 5 6 root @ servubuntu : # sqlite3 SQLite version 3.27.2 2019 -02- 25 16 :06:06 Enter ".help" for usage hints. Connected to a transient in-memory database. Use ".open FILENAME" to reopen on a persistent database. sqlite > root@servubuntu :# sqlite3 SQLite version 3.27.2 2019-02-25 16:06:06 Enter ".help" for usage hints. Connected to a transient in-memory database. Use ".open FILENAME" to reopen on a persistent database. sqlite>

Tal y como se observa nos muestra la versión instalada y su fecha de lanzamiento.

Para recibir ayuda con los opciones disponibles debemos escribir: “.help”

En el siguiente apartado veremos las operaciones más habituales.

Para salir de la consola sólo hemos de escribir “.quit” o bien CTRL+D

Trabajando con SQLite

Crear una nueva base de datos

Vamos a crear una nueva base de datos llamada “test.db”, vosotros podéis escoger el nombre que más os apetezca. Si esta base de datos ya existe simplemente accedemos a ella.

1 $ sqlite3 test.db $ sqlite3 test.db

La diferencia entre el comando “sqlite3” y el comando “sqlite3 test.db” es que el primero creará una base de datos temporal para la sesión y caducará cuando la sesión se cierre.

Crear la primera tabla

Vamos a crear una nueva tabla, llamada alumnos, con los atributos:

1 2 3 reg_no INT ( 4 ) Name VARCHAR ( 20 ) Marks INT ( 3 ) reg_no int(4) Name varchar(20) Marks int(3)

De la siguiente manera

1 2 3 4 5 sqlite > CREATE TABLE alumnos ( ...> reg_no INT ( 4 ) , ...> name VARCHAR ( 20 ) , ...> marks INT ( 3 ) ...> ) ; sqlite> create table alumnos ( ...> reg_no int(4), ...> name varchar(20), ...> marks int(3) ...> );

Si ya has trabajado con cualquier otro gestor de base de datos, conocerás los comandos SQL.

Podemos ver la tabla recién creada, escribiendo “.table”

1 2 sqlite > . table alumnos sqlite> .table alumnos

También podemos ver el esquema utilizado en la tabla, mediante la orden “.schema”

1 2 3 4 5 6 sqlite > . schema alumnos CREATE TABLE alumnos ( reg_no INT ( 4 ) , name VARCHAR ( 20 ) , marks INT ( 3 ) ) ; sqlite> .schema alumnos CREATE TABLE alumnos ( reg_no int(4), name varchar(20), marks int(3) );

Insertar datos

Vamos a insertar algunos datos:

1 2 3 201 , David , 87 202 , Carmen , 86 203 , Nadia , 90 201, David, 87 202, Carmen, 86 203, Nadia, 90

De la siguiente manera:

1 2 3 sqlite > INSERT INTO alumnos ( reg_no , name , marks ) VALUES ( 201 , 'David' , 87 ) ; > INSERT INTO alumnos ( reg_no , name , marks ) VALUES ( 202 , 'Carmen' , 86 ) ; > INSERT INTO alumnos ( reg_no , name , marks ) VALUES ( 203 , 'Nadia' , 90 ) ; sqlite> insert into alumnos (reg_no, name, marks) values (201, 'David', 87); > insert into alumnos (reg_no, name, marks) values (202, 'Carmen', 86); > insert into alumnos (reg_no, name, marks) values (203, 'Nadia', 90);

Recuperación de datos

Puede recuperar datos de la tabla con la instrucción select:

1 2 3 4 sqlite > SELECT * FROM alumnos; 201 | David | 87 202 | Carmen | 86 203 | Nadia | 91 sqlite> select * from alumnos; 201|David|87 202|Carmen|86 203|Nadia|91

Muestra el resultado en modo predeterminado (lista).

Podemos cambiar el modo con el comando “.mode”

Ingresamos la columna “.mode” para solicitar y luego realizamos una consulta de selección. Mostrará el resultado en un formato de columna.

1 2 3 4 5 6 7 sqlite> .mode column > select * from student; reg_no name marks ---------- ---------- ---------- 201 David 87 202 Carmen 86 203 Nadia 91 sqlite> .mode column > select * from student; reg_no name marks ---------- ---------- ---------- 201 David 87 202 Carmen 86 203 Nadia 91

Las órdenes delete, alter, drop, etc, utilizan la misma sintaxis que SQL

Comandos especiales

Ya vimos que los comandos mostrados por “.help” , ahora vamos a entender algunos otros comandos importantes.

Por ejemplo con “.databases“, podemos listar información de la base de datos seleccionada:

1 2 3 4 sqlite > . database seq name file --- --------------- -------------------- 0 main / home / david / test . db sqlite> .database seq name file --- --------------- -------------------- 0 main /home/david/test.db

O bien listar las tablas con “.table“, como sigue:

1 2 sqlite > . table alumnos sqlite> .table alumnos

En cambio con “.show” se nos muestra la configuración actual:

1 2 3 4 5 6 7 8 9 10 sqlite > . show echo: off EXPLAIN : off headers: off mode: list nullvalue: "" output: stdout separator: "|" stats: off width: sqlite> .show echo: off explain: off headers: off mode: list nullvalue: "" output: stdout separator: "|" stats: off width:

Estos atributos se pueden cambiar a posteriori.

Enviar la información a un fichero

Para enviar la información deseada a un fichero, simplemente debemos utilizar “.output“, y a partir de entonces todas las sentencias y resultados se enviarán al fichero:

1 sqlite > . output salida . txt sqlite> .output salida.txt

O podemos utilizar “.once” seguido del nombre de archivo si deseamos que solo se redirija el resultado de la próxima consulta.

Y esto es todo, espero que esta información os pueda ser de utilidad en algún momento. Nos vamos leyendo.

Fuentes consultadas

Linuxsize.com – Install and use SQLite in Linux