3. Contenido del seminario
¿Qué es SQLite3?
Características básicas de SQLite3
Usuarios de SQLite3
Usos de SQLite3
Instalación y herramientas
SQLite3 en Detalle
Tipos de datos y soporte de SQL:92
Funciones de agregación y fecha
Transacciones , triggers y vistas
Demo: ”Facturas”
6. SQLite3
¿Qué es SQLite3?
Sistema de Gestión de Bases de Datos relacionales
creado por D. Richard Hipp
Es de dominio público
Escrito en C en una biblioteca de <500kb y muy ligero
D Richard Hipp
autor de SQLite3
7. SQLite3
Características básicas de SQLite3
Multiplataforma:
Windows
Linux
Mac Os
Muy portable (la base de datos es el fichero y nada más):
Servidores
Workstations
PDAs
Teléfonos móviles
Otros sistemas embebidos
8. SQLite3
Características básicas de SQLite3 (II)
Sin configuración (Zero-Conf)
La base de datos es el fichero, y no se necesita nada más que acceso al
mismo.
”Serverless”:
No necesaria infraestructura cliente-servidor pesada (MySQL, Oracle,
PostgreSQL … )
Transacciones ACID {Atomicity, Consistency, Isolation and
Durability}
Soporte de triggers
Bases de datos de hasta 2 TB de tamaño
9. SQLite3
Características básicas de SQLite3 (III)
Disponibilidad como biblioteca estática o dinámica
Disponibilidad de una API para la mayoría de
lenguajes de programación
C/C++
PHP
Python
C# … Java
Ruby
Es fácilmente embebible en un programa de
gestión
10. SQLite3
Usuarios de SQLite3
Adobe: Photoshop LightRoom, Air …
Apple: Aperture, Safari, Iphone, Ipod Touch …
Mozilla: Firefox
Google: Gears …
Symbian
Muchos proyectos de Software Libre
11. SQLite3
Usos de SQLite3
Base de datos ”personal” (¿sustituto de Access?)
Base de datos para educación (para aprender y
comprender como funcionan las bases de datos)
Base de datos temporales
Base de datos para demostraciones
Base de datos para dispositivos embebidos
Base de datos para aplicaciones web
12. SQLite3
No utilizar SQLite3 …
Donde haya mucha concurrencia de accesos
Aplicaciones Cliente-Servidor ”grandes”
Tablas con campos de tamaño grande
15. SQLite3
Instalación de SQLite3
Gnu-Linux:
Ubuntu/Debian:
sudo apt-get install sqlite3 libsqlite3-dev
Otros:
Bajar binarios de SQLite3 y/o compilarlos
Windows:
Bajar cli y dll de SQLite3
Mac os X:
Bajar binarios de SQLite3
16. SQLite3
Herramientas para SQLite3
SQLite3 Command Line Interface:
Consola para manejar una base de datos SQLite3
SQLite Browser:
Cliente gráfico de SQLite3 http://sqlitebrowser.sourceforge.net/
SQLite Administrator:
Cliente gráfico de SQLite3 http://sqliteadmin.orbmu2k.de/
SQLiteman:
Cliente gráfico de SQLite3 http://sqliteman.com/
SQLite Manager:
Extensión para Firefox que permite manejar bases de datos SQLite3:
https://addons.mozilla.org/ca/firefox/addon/5817
17. SQLite3
Herramientas para SQLite3 (II)
SQLite3 CLI
18. SQLite3
Herramientas para SQLite3 (III)
SQLite
Administrator
21. SQLite3
Tipos de datos soportados por SQLite3
SQLite3 utiliza tipado dinámico para los valores de las
columnas...
NULL: Para valores nulos
INTEGER: Para valores numéricos de 32 bits con signo
REAL: Para valores numéricos de 32 bits con signo en formato IEEE
TEXT o VARCHAR: Para cadenas de texto en UTF-8
BLOB: Para datos binarios
22. SQLite3
Cosas de SQL:92 no soportadas por SQLite3
Claves ajenas/integridad referencial:
Pueden implementarse mediante triggers ver
http://justatheory.com/computers/databases/sqlite/foreign_key_triggers.html
Triggers:
Triggers con ”FOR EACH STATEMENT”, Triggers que se disparan por otro
Trigger.
Modificar tablas:
Solo rename table y add column.
Joins:
RIGHT y FULL OUTER JOIN no están soportados.
Vistas actualizables (solo vistas de solo lectura)
Grant y Revoke
23. SQLite3
Funciones de columna y agregadas en SQLite3
SQLite3 permite uso de GROUP BY ,y HAVING
SELECT COUNT(*) AS cuantos,nota
FROM NotasAlumnoAprobados
GROUP BY( nota ) HAVING ( nota>5 )
ORDER BY 1 DESC;
También se permite el uso de:
AVG (columna)
COUNT (columna)
MAX (columna) y MIN (columna)
SUM (columna)
24. SQLite3
Funciones de fecha en SQLite3
SQLite3 tiene como funciones para fechas y horas a
strftime( formato, string, modificador, modificador, … );
date( string, modificador, modificador, …) ;
time( string, modificador, modificador, …) ;
datetime( string, modificador, modificador, …) ;
current_time , current_date y current_timestamp
SELECT COUNT(*), STRFTIME('%Y',fecha)
FROM Facturas
GROUP BY(
STRFTIME('%Y',fecha)
) HAVING ( STRFTIME('%Y','now')-STRFTIME('%Y',fecha)=1 );
25. SQLite3
Transacciones en SQLite3
Las transacciones en SQLite3 cumplen el estándar
ACID (Atomicity, Consistency, Isolation and Durability):
Atomicity (Atomicidad): O se ejecutan todas las tareas de la transacción o
ninguna
Consistency (Consistencia): Garantiza que sólo se ejecutan las
operaciones que mantienen la integridad de la base de datos
Isolation (Aislamiento): Asegura que una operación no puede ver ni influir
otras
Durability (Durabilidad): Una vez realizada una operación, ésta persistirá y
no se podrá deshacer aunque falle el sistema.
26. SQLite3
Transacciones en SQLite3 (I)
Todas las transacciones comienzan por
BEGIN { DEFERRED/INMEDIATE/EXCLUSIVE } TRANSACTION
(DEFERRED por defecto)
Luego se colocan las operaciones de la transacción
Por último se hace un COMMIT; O END; TRANSACTION
Y si fuera necesario, un ROLLBACK a un SAVEPOINT (punto de guardado)
27. SQLite3
Transacciones en SQLite3 (II)
Ejemplos de transacciones:
BEGIN TRANSACTION;
CREATE TABLE Alumno (id INTEGER PRIMARY KEY,nombre TEXT);
INSERT INTO Alumno VALUES(1,”Fulanito”);
INSERT INTO Alumno VALUES(2,”Menganito”);
DELETE FROM Alumno WHERE nombre LIKE '%anito';
SELECT COUNT(*) FROM Alumno;
COMMIT;
BEGIN TRANSACTION;
UPDATE Alumno SET nombre=”*ito”;
SELECT * FROM Alumno;
COMMIT;
ROLLBACK;
28. SQLite3
Triggers en SQLite3
Creación de Triggers
29. SQLite3
Triggers en SQLite3 (I)
CREATE TRIGGER TR_Alumno BEFORE DELETE ON Alumno
FOR EACH ROW
BEGIN
INSERT INTO Old_Alumnos VALUES (OLD.id,OLD.nombre);
END;
CREATE TRIGGER UpdateCustAddress AFTER UPDATE OF address ON Customer
FOR EACH ROW
BEGIN
UPDATE orders SET address = new.address WHERE customer_name=old.name;
END;
30. SQLite3
Triggers en SQLite3 (II)
Función RAISE (emite un error)
CREATE TRIGGER TRProyecto
BEFORE DELETE ON Proyectos
WHEN OLD.id IN (
SELECT id FROM Tareas
)
BEGIN
SELECT RAISE(ROLLBACK,”Existen tareas de éste proyecto … ”);
END;
31. SQLite3
Vistas en SQLite3
CREATE VIEW ClientesValenciaFacturas AS
SELECT codcli,nombre,telefono,direccion
FROM Clientes
WHERE codcli IN (
SELECT codcli FROM Facturas
)
AND (codpostal LIKE '46%');