Skip to content

2.2 SQLite

SQLite es una de las bases de datos más desplegadas en el mundo.

La encontrarás en aplicaciones móviles, navegadores web, sistemas operativos y embebidos.

Es relacional, muy ligera y no requiere un servidor para funcionar, ya que almacena los datos en un único archivo.

  • Pros:
    • Muy ligera y rápida.
    • No requiere instalación de servidor.
    • Ideal para aplicaciones pequeñas y medianas.
    • Soporta transacciones ACID.
    • Escala bien para aplicaciones de escritorio y móviles.
  • Contras:
    • No es adecuada para aplicaciones de gran escala o con alta concurrencia.
    • Carece de algunas características avanzadas de bases de datos más grandes (como PostgreSQL o MySQL).
    • Si necesitas una base de datos distribuida o con alta disponibilidad, no es la mejor opción.
    • Carece de soporte de un sistema de usuarios y permisos.

Instalación

En la mayoría de las distribuciones de Linux, SQLite ya viene instalado por defecto. Si no lo tienes, puedes instalarlo con:

sudo apt install sqlite3

Diferencias con otras bases de datos

Aunque usamos SQL como lenguaje de consulta, SQLite tiene algunas diferencias en cuanto a su DDL (Data Definition Language) y DML (Data Manipulation Language) en comparación con otras bases de datos como MySQL o PostgreSQL. Algunas de las diferencias más notables son:

  • Tipos de datos: SQLite es más flexible con los tipos de datos. Por ejemplo, no requiere que declares un tipo de dato específico para una columna; puedes insertar cualquier tipo de dato en cualquier columna si no has especificado un tipo de dato.
  • Autoincremento: En SQLite, puedes usar INTEGER PRIMARY KEY AUTOINCREMENT para crear una columna que se incremente automáticamente. No es necesario especificar AUTO_INCREMENT como en MySQL.
  • Funciones de agregación: Algunas funciones de agregación pueden comportarse de manera diferente. Por ejemplo, SQLite no soporta GROUP BY con columnas que no están en la lista de selección a menos que se use ANY_VALUE().
  • Vistas: Las vistas en SQLite son más simples y no soportan algunas características avanzadas que podrías encontrar en otras bases de datos, como las vistas materializadas.

REPL (Read-Eval-Print Loop)

Para iniciar el REPL de SQLite, simplemente ejecuta:

sqlite3

Esto abrirá una consola interactiva donde puedes ejecutar comandos SQL directamente.

Crear una base de datos

Para crear una nueva base de datos, simplemente especifica el nombre del archivo al iniciar SQLite:

sqlite3 mi_base_de_datos.db

Esto creará un archivo llamado mi_base_de_datos.db en el directorio actual y abrirá la consola de SQLite para interactuar con esa base de datos. A partir de este momento puedes lanzar algo como:

CREATE TABLE usuarios (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    password TEXT NOT NULL UNIQUE
);
INSERT INTO usuarios (name, password) VALUES ('admin', 'admin');

Crear una base de datos a partir de un .sql

Si tienes un archivo .sql con las instrucciones para crear una base de datos, puedes ejecutarlo directamente desde la línea de comandos:

sqlite3 mi_base_de_datos.db < script.sql

Esto ejecutará todas las instrucciones SQL contenidas en script.sql sobre la base de datos mi_base_de_datos.db.

Consultar una base de datos

Puedes lanzar consultas sobre una base de datos sin necesidad de abrir el REPL:

sqlite3 mi_base_de_datos.db "SELECT * FROM usuarios;"

Exportar una base de datos a un archivo .sql

Para exportar una base de datos a un archivo .sql, puedes usar el comando .dump dentro del REPL de SQLite:

sqlite3 mi_base_de_datos.db ".dump" > mi_base_de_datos.sql

Esto generará un archivo mi_base_de_datos.sql con todas las instrucciones SQL necesarias para recrear la base de datos.