SQLite es una librería en C que implementa un motor de base de datos SQL. Es un sistema de gestión de bases de datos relacionales (o RDBMS). La mayoría de las bases de datos SQL trabajan con el modelo cliente/servidor. Tomemos como ejemplo MySQL. Para introducir y recibir datos de una base de datos MySQL es necesario enviar una petición al servidor MySQL, que al recibirla le proporcionará la respuesta adecuada. A diferencia de MySQL, las bases de datos SQLite se manejan directamente desde el disco. No es necesario crear peticiones al servidor.
Instalación
Operaremos sobre nuestra base de datos utilizando la interfaz de línea de comandos (CLI) de sqlite31. Trabajaremos bajo la plataforma Linux. El CLI de sqlite3 para MAC OS y Windows es igual, pero por coherencia, se recomienda instalar Homestead Improved – una VM ligera que se ejecuta en 5 minutos y que mantendrá tu ordenador limpio de software extra innecesario.
Para instalarlo en Homestead Improved (o en cualquier sistema operativo basado en Debian como Ubuntu), ejecuta lo siguiente:
sudo apt-get install sqlite3 libsqlite3-dev
Esto instalará sqlite3. Para instalarlo en otras plataformas, sigue sus instrucciones oficiales. Una vez instalado podemos iniciar la sesión. Abre la Terminal/Línea de comandos e introduce el comando sqlite3
. Debes ver algo de este tipo :
La segunda línea te dice que introduzcas .help
para recibir instrucciones. Hay un prompt esperando que escribas un comando. Así que sigue adelante e introduce .help
. Esto le dará una lista de Meta Comandos y sus descripciones.
Comandos Meta
Los Comandos Meta se utilizan para definir el formato de salida de las tablas, examinar las bases de datos y para otras operaciones administrativas. Siempre comienzan con un punto. Incluso .help
es un meta comando. Puedes repasar la lista. Aquí tienes algunos que te serán frecuentemente útiles:
Comando | Descripción |
---|---|
.show | Muestra la configuración actual de varios parámetros | .bases de datos | Proporciona los nombres y archivos de las bases de datos |
.quit | Salir del programa sqlite3 |
.tables | Mostrar las tablas actuales |
.schema | Mostrar el esquema de la tabla |
.header | Mostrar u ocultar la cabecera de la tabla de salida | .mode | Selecciona el modo para la tabla de salida | .dump | Volcar la base de datos en formato de texto SQL |
Comandos estándar
Veamos los comandos estándar en sqlite3. Los meta comandos se emiten para examinar una base de datos. Los comandos SQL estándar se emiten para operar en una base de datos. Los comandos estándar se pueden clasificar en tres grupos:
-
Lenguaje de definición de datos: Proporciona la estructura de almacenamiento y los métodos para acceder a los datos del sistema de base de datos.
- Crear
- Alterar
- Soltar
- Lenguaje de Manipulación de Datos: Permite a los usuarios manipular (añadir/modificar/borrar) los datos.
- INSERTAR
- ACTUALIZAR
- ELIMINAR
- Lenguaje de consulta de datos: Permite a los usuarios recuperar los datos requeridos de la base de datos.
- SELECT
Nota: SQLite entiende muchos otros comandos estándar, una lista de los cuales se puede leer aquí. Dado que el tutorial es una introducción a nivel de principiante, sólo cubriremos los comandos mencionados.
Las bases de datos SQLite son archivos portátiles multiplataforma. Se pueden almacenar en varios dispositivos de almacenamiento y se pueden transferir a través de diferentes ordenadores.
Aprenderemos a trabajar con sqlite3 con nuestra base de datos de la Sección de Comentarios. Casi todos los sitios web de hoy en día tienen una sección de comentarios. Para publicar un comentario, el usuario debe introducir los siguientes datos:
- Nombre
- Correo electrónico
- Sitio web
- Comentario
De los cuatro, sólo la URL del sitio web es opcional. También debemos definir una columna que numere los comentarios. Vamos a llamarla post_id.
Podemos definir los tipos de datos de las columnas (atributos) de la siguiente manera:
Atributo Tipo de dato requerido post_id INTEGER nombre TEXT email TEXT website_url TEXT comment TEXT Puedes ver la documentación de los diferentes Datatypes y Storage Classes que proporciona SQLite3.
SQLite3 utiliza Manifest Typing2. La mayoría de los otros motores de bases de datos, incluyendo MySQL, utilizan Static Typing.
Ahora vamos a crear una base de datos. Si todavía está en el programa sqlite3, salga de él introduciendo
.quit
en el prompt de sqlite. A continuación, emite el comando:sqlite3 comment_section.db
Esto creará un archivo de base de datos comment_section.db en el directorio de trabajo actual.
Nota: Si no hay un nombre de archivo después del comando, sqlite3 crea automáticamente una base de datos temporal. Es lo que ocurrió cuando introdujimos el comando único sqlite3 por primera vez.
CREAR TABLA
Para almacenar los comentarios debemos definir una tabla. Vamos a llamarla
. Para crearla, introducimos la sentencia:
CREATE TABLE comments ( post_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, email TEXT NOT NULL, website_url TEXT NULL, comment TEXT NOT NULL );
NOT NULL
se asegura de que el valor concreto no quede vacío en un registro.PRIMARY KEY
3 yAUTOINCREMENT
4 elaboran el atributo post_id.Para comprobar si se ha creado la tabla, emite el meta comando
.tables
. Mostrará el nombre de la tabla.
Nota: Para obtener el esquema de la tabla introduce
.schema comments
Ahora que la tabla ha sido creada, necesitamos introducir datos.
INSERTAR FILAS
Supongamos que un usuario ha introducido un comentario con los datos:
Name : Shivam MamgainEmail : [email protected] : shivammg.blogspot.comComment : Great tutorial for beginners.
Para insertarlo, utilizamos el comando INSERT.
INSERT INTO comments ( name, email, website_url, comment )VALUES ( 'Shivam Mamgain', '[email protected]','shivammg.blogspot.com', 'Great tutorial for beginners.' );
No he proporcionado el valor de post_id, aunque está definido como
NOT NULL
. El caso es que no es necesario porque es un campoAUTOINCREMENT
.Inserta algunas filas más en la tabla para practicar.
SELECT
Hemos aprendido a insertar datos en la tabla. Para recuperar datos utilizamos el comando SELECT.
SELECT post_id, name, email, website_url, commentFROM comments;
La sentencia anterior también se puede escribir como:
SELECT *FROM comments;
Esto recuperará todas las filas de la tabla. La tabla resultante podría parecer ofuscada sin cabeceras y sin una separación adecuada entre columnas. Para superar esto, debemos alterar algunos parámetros.
Introduce
.show
Para mostrar los atributos de las columnas, introduce
.headers ON
.
Para mostrar las filas con estilo de columna, introduce.mode column
.
Introduzca de nuevo la sentencia SELECT.Nota: Seleccione el modo de visualización que le convenga. Entra en
.help
y busca.mode
. Se te mostrarán los distintos valores que puede tener.mode
.Actualización
Supongamos que el correo electrónico de ‘Shivam Mamgain’ ha cambiado a ‘[email protected]’ . Necesitamos actualizar la fila. Emita la siguiente sentencia:
UPDATE commentsSET email = '[email protected]'WHERE name = 'Shivam Mamgain';
Esto cambiará el atributo email para el nombre ‘Shivam Mamgain’ a ‘[email protected]’.
Nota: El atributo name no es único, por lo que la sentencia anterior puede afectar a más de una fila. Para cada nombre = ‘Shivam Mamgain’ el correo electrónico se establecerá en ‘[email protected]’. Para actualizar una fila concreta, utilice el atributo post_id. Se define como un
PRIMARY KEY
y siempre será único.DELETE
Para ELIMINAR fila(s) de la tabla podemos utilizar la condición WHERE, al igual que en UPDATE.
Supongamos que necesitamos eliminar una fila con post_id 9. Podemos introducir el comando:
DELETE FROM commentsWHERE post_id = 9;
Necesitamos eliminar todos los comentarios que son publicados por ‘Bart Simpson’ y ‘Homer Simpson’. Podemos ejecutar la siguiente consulta:
DELETE FROM commentsWHERE name = 'Bart Simpson' OR name = 'Homer Simpson';
ALTER
Se pueden añadir nuevas columnas a una tabla utilizando ALTER. En la web, la mayoría de la gente no utiliza necesariamente su nombre real. Generalmente trabajan bajo un alias, un nombre de usuario. Necesitamos añadir una columna nombre de usuario a nuestra tabla. La siguiente consulta cumple la tarea:
ALTER TABLE commentsADD COLUMN username TEXT;
Esto creará una columna nombre de usuario en
y establecerá su tipo de datos a TEXTO. El valor de nombre de usuario para las filas ya insertadas se establecerá como NULL.
El comando ALTER también se utiliza para cambiar el nombre de las tablas. Cambiemos la tabla
por
Coms
.ALTER TABLE commentsRENAME TO Coms;
DROP
El borrado de una tabla significa eliminar la tabla completa. La tabla
Coms
se puede borrar con la siguiente consulta:DROP TABLE Coms;
Conclusión
SQLite3 ofrece muchas ventajas sobre otras bases de datos relacionales. Algunas de sus características distintivas se pueden leer aquí. La mayoría de los frameworks de PHP y muchos otros frameworks web incluyendo Django, Ruby on Rails y web2py tienen SQLite3 como su base de datos por defecto. Su ligereza la hace preferible para el almacenamiento local en los navegadores web. También se emplea como almacenamiento en el cliente para muchos sistemas operativos, incluidos Android y Windows Phone 8. Es uno de los motores de bases de datos más desplegados.
En el tutorial interactuamos con un sistema de base de datos SQLite. Existen aplicaciones GUI para hacer lo mismo, sin tener que aprender comandos. Dos de estas aplicaciones son DB Browser for SQLite y SQLiteStudio. También se puede practicar SQL en línea en SQL Fiddle.
Esta guía ha cubierto los aspectos básicos para empezar con SQLite3. Espero que te tiente a ir más allá. Puedes integrarlo fácilmente con PHP usando la clase común PDO.
- SQLite versión 3
- El Manifest Typing libera muchas restricciones sobre el tipo de valor que se puede introducir para un campo en particular. Esto le permite introducir cualquier valor de cualquier tipo de datos en una columna, independientemente del tipo declarado de la columna (excepto para
INTEGER PRIMARY KEY
). Ni siquiera es necesario indicar el tamaño máximo de los tipos de datos. Después de que el usuario introduzca los datos, SQLite determina el tamaño que necesitaría en el disco. Para obtener una visión más profunda consulte Tipos de datos en SQLite3. - Un
PRIMARY KEY
puede definir de forma exclusiva una fila concreta. Dicho atributo debe definirse siempre comoNOT NULL
. -
AUTOINCREMENT
establece automáticamente el atributo correspondiente del registro actualmente insertado a un número que es uno más el valor deAUTOINCREMENT
(a menos que se especifique). Los atributos definidos porAUTOINCREMENT
deben ser necesariamenteINTEGERS
.
.