0% encontró este documento útil (0 votos)
67 vistas11 páginas

Practica P1S1 SQLite Intro

Este documento presenta SQLite, un motor de base de datos ligero y portable. Explica cómo instalar SQLite, crear y manipular bases de datos, tablas y datos. También describe los principales comandos como .tables, .schema, .import y .export para examinar y modificar la estructura y contenido de una base de datos SQLite.

Cargado por

Bobby Zeta
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
67 vistas11 páginas

Practica P1S1 SQLite Intro

Este documento presenta SQLite, un motor de base de datos ligero y portable. Explica cómo instalar SQLite, crear y manipular bases de datos, tablas y datos. También describe los principales comandos como .tables, .schema, .import y .export para examinar y modificar la estructura y contenido de una base de datos SQLite.

Cargado por

Bobby Zeta
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 11

Prácticas Informática Aplicada

Grado en Ingeniería Electrónica Industrial y Automática


P1S1

PRÁCTICA 1: Bases de Datos Relacionales


SESIÓN 1: Introducción al entorno SQLite
Objetivos: familiarizarse con el entorno SQLite conociendo las principales características
del mismo, probando el entorno manipulando una base de datos de ejemplo y
experimentando con las distintas posibilidades para la configuración y gestión de datos.

Requisitos: el estudiante debe haber leído la introducción a SQLite (hasta la página 8


inclusive) con anterioridad al desarrollo de las prácticas, que se detallan en las páginas
9 a 11 en dos actividades de una hora de duración cada una.

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.

SQLite es el motor de bases de datos habitual2 en las aplicaciones de teléfonos móviles


dado su pequeño tamaño y fácil manejo y está implementada en lenguaje ANSI-C. SQLite
lee y escribe directamente en archivos de disco. Toda la información de una base de
datos (las tablas, sus índices, las vistas, etc.) está contenida en un único archivo. El
formato de dicho archivo es multi-plataforma, pudiendo trasladar una base de datos
entre máquinas con distintas arquitecturas sin ningún problema de compatibilidad.
Debemos ver a SQLite no como un sustituto de por ejemplo ORACLE (porque nunca lo
será), sino como un magnífico sustituto de fopen() del lenguaje C.

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.

1Puede consultar qué distingue a SQLite de otros motores de bases de datos en


https://sqlite.org/different.html

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

• Índices sobre múltiples columnas.


• Restricciones de CHECK, UNIQUE, NOT NULL y FOREIGN KEY.
• Gestión de transacciones ACID4 con BEGIN, COMMIT y ROLLBACK. Gestión
anidada de transacciones.
• Una biblioteca muy completa de funciones estándar SQL5.
• Funciones agregadas6.
• SELECT con DISTINCT, ORDER BY, GROUP BY, HAVING, LIMIT, OFFSET, UNION,
UNION ALL, INTERSECT, EXCEPT.
• UPDATE, DELETE e INSERT.
• Soporte para JSON.
• Múltiples bases de datos en la misma conexión usando ATTACH DATABASE.

Primeros pasos con SQLite


Para empezar a trabajar con SQLite lo primero que tenemos que hacer es descargar el
código desde https://sqlite.org/download.html

En el Shell de comandos o en una ventada de DOS escribiremos: “sqlite3 test.db”. Esto


creará una nueva base de datos con el nombre “test.db” (puede elegir otro nombre si
quiere).

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:

4 Puede ver qué es una transacción ACID en http://dbadixit.com/modelo-acid-transacciones/


5 https://sqlite.org/lang_corefunc.html
6 https://sqlite.org/lang_aggfunc.html
Prácticas Informática Aplicada
Grado en Ingeniería Electrónica Industrial y Automática
P1S1

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".

Si no indicamos ninguna base de datos al arrancar sqlite3 pero trabajamos creando


tablas e insertando datos, si queremos después guardar todo lo creado en una base de
datos concreta usaremos el comando “.save”, con la precaución de que si ya existe una
base de datos con ese nombre estaremos sobrescribiéndola.
Prácticas Informática Aplicada
Grado en Ingeniería Electrónica Industrial y Automática
P1S1

Comandos más importantes de SQLite


SQLite tiene una serie de comandos, algunos de ellos muy útiles. Puede verse la lista
tecleando “.help” o bien “.help TOPIC” que dará información sobre el comando
especificado. La lista completa es la siguiente:

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:

Podemos modificar el ancho de presentación de cada columna con el comando


“.width”. Por ejemplo, para fijar un ancho de 12 para la primera columna y de 6 para la
segunda haríamos (0 es asumir el tamaño por defecto):
Prácticas Informática Aplicada
Grado en Ingeniería Electrónica Industrial y Automática
P1S1

Podemos desactivar se muestren las cabeceras con “.headers”:

El comando “.output” nos permite volcar los resultados de una consulta en un archivo:

Sqlite3 proporciona varios comandos para extraer información de interés de nuestra


base de datos. Para ver las tablas que tenga la base de datos en uso tenemos el comando
“.tables”:

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 exportar a Excel con el comando “.excel”:

De esta manera se abre automáticamente el entorno para la gestión de hojas de cálculo


que tengamos en nuestro ordenador con el resultado de la consulta.

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:

$ sqlite3 databasefile.db .dump > databasefile.sql

De la misma manera y en sentido inverso, para crear una base de datos a partir de un
archivo SQL existente haríamos:

$ sqlite3 databasefile.db < databasefile.sql


Prácticas Informática Aplicada
Grado en Ingeniería Electrónica Industrial y Automática
P1S1

Por defecto, la comprobación de las restricciones de integridad referencial de clave


ajena no se hacen. Si queremos que se comprueben tendremos que cambiarlo haciendo
PRAGMA foreign_keys = true;7

Tipos de datos en SQLite


Los tipos de datos que maneja SQLite son los siguientes 8:
• NULL. El valor NULL.
• INTEGER. El valor es un número entero con signo almacenado en 1, 2, 3, 4, 6, o
8 bytes dependiendo de la magnitud del valor.
• REAL. Es el valor en punto flotante almacenado como un 8-byte IEEE.
• TEXT. El valor es una cadena de caracteres (string) almacenado usando el
sistema de codificación de la base de datos (UTF-8, UTF-16BE o UTF-16LE).
• BLOB. Un dato binario crudo (para imágenes, audio, etc.).

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).

7 Puede consultar la totalidad de PRAGMAS para configurar el funcionamiento de SQLite en


https://sqlite.org/pragma.html
8 Es interesante consultar cómo trata SQLite la compatibilidad con los tipos de datos de otros

motores de bases de datos leyendo https://sqlite.org/datatype3.html


9 Puede consultar las posibilidades que SQLite ofrece para gestionar fechas en

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)

10 Base de datos de ejemplo extraída desde https://www.sqlitetutorial.net/sqlite-sample-


database/
11En algunas ocasiones SQLite puede no interpretar correctamente el carácter de comillas para
delimitar las cadenas de caracteres. El carácter correcto es el siguiente " o bien el simple '
Prácticas Informática Aplicada
Grado en Ingeniería Electrónica Industrial y Automática
P1S1

Creamos después la tabla profesor, porque apunta a edificio. Prescinda en su creación


de la parte referida a ON DELETE, ON UPDATE. Esto implicará que por defecto ante el
borrado o actualizaciones el sistema no permitirá los cambios.

PROFESOR (código_profesor: INTEGER, nombre VARCHAR(40) NOT NULL,


tipo_profesor: VARCHAR(10), despacho: INTEGER)

despacho REFERENCES Edificio(código_edificio) ON DELETE CASCADE ON UPDATE SET


NULL

3. Inserte las siguientes filas en las tablas usando INSERT. Primero en edificio,
después en profesor:

código_edificio denominación metros


1 Teleco 8700
2 Industriales 12500
3 ELDI 28766

código_profesor nombre tipo_profesor despacho


10 ‘Juan López’ ‘PTU’ 1
20 ‘Beatriz Ruiz’ ‘CU’ 2
30 ‘Luisa Méndez’ ‘PDOC’ 2
40 ‘Javier Calatrava’ ‘PTU’

Observe que no todos los edificios tienen profesores asignados (‘ELDI’) y no todo
profesor está en un edificio (‘Javier Calatrava’).

4. Realice consultas SELECT para verificar que la información está almacenada en


las tablas convenientemente.
5. Intente insertar el profesor (50, ‘Miguel Pérez’, ‘CU’, 55). ¿Qué ocurre y a qué se
debe?
6. Intente insertar el profesor (10, ‘Leopoldo Arias’, ‘CU’, 1). ¿Qué ocurre y a qué se
debe?
7. Elimine el edificio 1 y examine las consecuencias.
8. Actualice en la tabla edificio el código del edificio 2 para que valga 22. ¿Qué ha
ocurrido?
Prácticas Informática Aplicada
Grado en Ingeniería Electrónica Industrial y Automática
P1S1

DIAGRAMA ENTIDAD-RELACIÓN BBDD CHINOOK

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.

También podría gustarte