Practica P1S1 SQLite Intro
Practica P1S1 SQLite Intro
Introducción a SQLite
SQLite es una biblioteca software que implementa un motor de bases de datos auto-
contenido, sin servidor, sin necesidad de configuración previa y transaccional 1.
Probablemente sea el motor de bases de datos más ampliamente desplegado a nivel
mundial. Es de dominio público, disponible para cualquier propósito comercial o
privado. Puede descargarse en sqlite.org.
No debe confundirnos el sufijo “Lite” en cuanto a pensar que SQLite será algo de
juguete. Algunas características que nos van a hacer darnos cuenta del potencial que
tiene este motor a pesar de su simplicidad son las siguientes3:
• No está limitado cuántas tablas, índices, disparadores o vistas podemos tener.
• Hasta 32K columnas en una tabla y no hay límite en el número de filas.
2Puede consultarse con detalle el tipo de aplicaciones y entornos en los que SQLite es
especialmente útil en https://sqlite.org/whentouse.html
3Puede consultar la lista completa de palabras clave de SQLite con acceso a la documentación
en https://sqlite.org/keyword_index.html
Prácticas Informática Aplicada
Grado en Ingeniería Electrónica Industrial y Automática
P1S1
Por ejemplo, si quisiéramos crear una base de datos llamada “ex1” con una única tabla
con nombre “tbl1” haríamos lo siguiente:
Para terminar la sesión en SQLite podemos teclear Control-D o bien el comando .quit en
el Shell.
Hay que asegurarse de que siempre terminamos las sentencias SQL con un ‘;’. Si lo
omitimos, sqlite3 seguirá pidiéndonos la información faltante:
Si nuestro ordenador tiene el sistema operativo Windows y hacemos doble clic sobre el
ejecutable sqlite3 se abrirá la aplicación pero no tendrá ninguna base de datos asociada.
Para vincularnos con una en particular usaremos el comando .open seguido del nombre
de la base de datos.
El ejemplo anterior implica abrir la base de datos “ex1.db” y usarse. Se crear el archivo
si previamente no existía. Podemos especificar una ruta concreta para indicar la
ubicación del archivo con la sintaxis "c:/work/ex1.db".
El programa sqlite3 nos permite seleccionar con el comando “.mode” cómo mostrar los
resultados en diferentes formatos: "csv", "column", "html", "insert", "line", "list",
"quote", "tabs", y "tcl". El modo por defecto es “list”. Cada fila del resultado además
puede tener un separador u otro entre columnas que especificamos con el comando
“.separator”.
Prácticas Informática Aplicada
Grado en Ingeniería Electrónica Industrial y Automática
P1S1
El modo “line” muestra cada columna en una fila distinta como se muestra a
continuación:
El modo “column” permite mostrar cada registro en una línea separada y tabuladas las
columnas:
El comando “.output” nos permite volcar los resultados de una consulta en un archivo:
El comando “.indexes” nos mostrará los índices existentes. El comando “.schema” nos
muestra el esquema completo de la base de datos o de la tabla que le indiquemos:
El comando “.databases” nos muestra todas las bases de datos activas en la conexión
actual.
Prácticas Informática Aplicada
Grado en Ingeniería Electrónica Industrial y Automática
P1S1
Podemos importar datos en formato CSV con el comando “.import” a una tabla en
particular. Es imprescindible haber fijado previamente el “mode” a “csv”. Si la tabla no
existe actualmente entonces es creada automáticamente y el contenido de la primera
fila se usa para determinar el nombre de las columnas. Si la tabla ya existe entonces
todas las filas son interpretadas como contenido. Si el archivo contiene una primera fila
con los nombres de las columnas podemos saltar esta primera fila con la opción “--skip
1”.
De la misma manera podemos exportar los datos de una tabla a formato CSV:
El comando anterior “.headers on” hace que se vuelquen los nombres de las columnas
como primera fila del resultado. Puede desactivarse con “off”. El comando “.once
FILENAME” causa que la salida del SELECT vaya a disco en lugar de a la pantalla. El
comando “.system” tiene el mismo efecto que hacer doble clic en el archivo en
Windows. El equivalente en Mac sería “.system open dataout.csv”.
Podemos desde la línea de comandos del sistema operativo hacer un volcado como
fichero de texto SQL de una base de datos con el argumento .dump:
De la misma manera y en sentido inverso, para crear una base de datos a partir de un
archivo SQL existente haríamos:
SQLite tiene algunas singularidades en cuanto a los tipos de datos que considera:
• Es flexible en la gestión de los datos y los tipos de datos esperados. Se puede
guardar un string de 2000 caracteres donde solo había sitio para 20 sin que se
produzca error. O almacenar un string donde se espera un entero. De hecho, nos
permite crear tablas con columnas sin tipo de datos específico, pudiendo
guardar cualquier valor. Obviamente esto implica pérdida de compatibilidad
para poder integrar la base de datos en otros entornos.
• No tiene el tipo de datos BOOLEAN. Verdadero y falso son almacenados como 1
y 0, respectivamente.
• No tiene un tipo de datos específico para manejar fechas como el resto de
motores9. Así, DATETIME no se soporta. Las fechas deben almacenarse como
texto en formato ISO-8601 (por ejemplo '2018-04-02 12:13:46'), como un
número INTEGER como los segundos transcurridos desde 1970 (el conocido
“unix time”), o como un valor REAL (el número de días transcurridos desde el 24
de noviembre del año 4714 antes de Cristo).
https://sqlite.org/lang_datefunc.html
Prácticas Informática Aplicada
Grado en Ingeniería Electrónica Industrial y Automática
P1S1
Es hora de ponerse a trabajar con el entorno. Para ello, siga los pasos que se indican a
continuación, mostrando al profesor los resultados que vaya obteniendo.
Actividad 1: Trabajar con una base de datos existente. Tiempo máximo 1 hora.
1. Instale el entorno SQLite3 (el profesor precisará si es necesario o no), y ejecútelo
parametrizado con el nombre de la base de datos 10 “chinook.db” que deberá
haber descargado del Aula Virtual y tener en el directorio donde se encuentra el
ejecutable sqlite3.
2. Visualice cuántas tablas tiene la base de datos y el esquema de la misma.
3. Dibuje sobre el papel el diagrama Entidad-Relación que puede extraer a partir
de la información anterior y las relaciones de clave ajena que forman parte de la
creación de las tablas. Nota: para no invertir demasiado tiempo, represente
sólo el atributo clave principal. Cuando vea que una tabla tiene una clave ajena
a otra tabla ya sabe que hay una relación 1-a-n entre ambas de manera que la
en el diagrama, la que incluye la clave ajena tiene el n (salvo que tenga restricción
de unicidad que no es el caso que nos ocupa), y el otro extremo el 1. Compruebe
el resultado con el diagrama que se incluye en el Anexo que está en una notación
distinta, pero que puede servir para contrastar el resultado.
4. Muestre en pantalla las filas de la tabla “albums” y “customers”.
5. Cambie el formato de presentación para que el separador de columnas sea la ‘,’.
6. Cambie al modo “column” en la presentación de los datos anteriores.
7. Realice un volcado de la consulta anterior en el fichero “listado_albums.csv” y
compruebe abriendo la hoja de calculo que la información se ha extraído
correctamente.
8. Genere desde la ventana de DOS y con el argumento .dump un archivo SQL para
la base de datos activa.
Actividad 2: Crear una base de datos y las tablas asociadas. Tiempo máximo 1 hora.
1. Abra el entorno creando la base de datos “informatica.db”. Active el PRAGMA
para el control de claves ajenas.
2. Cree las tablas siguientes atendiendo a la información que se muestra (prescinda
de las tildes) y usando como ejemplo para ver la sintaxis los CREATE TABLE que
ha visualizado de la base de datos anterior para el caso de la tabla ALBUMS
disponible en el archivo SQL generado. Edite primero la sentencia CREATE en un
editor de texto sin formato tipo Wordpad11:
Creemos primero la tabla edificio. Compruebe con .tables que la tabla existe tras ello.
EDIFICIO (código_edificio: INTEGER, denominación VARCHAR(40) NOT NULL, metros:
REAL)
3. Inserte las siguientes filas en las tablas usando INSERT. Primero en edificio,
después en profesor:
Observe que no todos los edificios tienen profesores asignados (‘ELDI’) y no todo
profesor está en un edificio (‘Javier Calatrava’).
Según el diagrama:
• 1 álbum tiene obligatoriamente y exactamente 1 artista
asociado.
• 1 artista tiene entre cero y muchos albums.
• 1 track tiene asociado 0 o 1 género, etc.