SQLite

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 9 de mayo de 2022; las comprobaciones requieren 52 ediciones .
SQLite
Tipo de sistema de gestión de base de datos relacional sin servidor [d]
Desarrollador Ricardo Hipp [d]
Escrito en C [2]
Sistema operativo multiplataforma
Primera edición agosto de 2000
ultima versión
Formatos de archivo legibles Formato de archivo de base de datos SQLite [d] , base de datos SQLite 3.x [d] y diario rollbak de SQLite [d]
Formatos de archivo generados Formato de archivo de la base de datos SQLite [d] , base de datos SQLite 3.x [d] , base de datos comprimida SQLite Zipvfs [d] y diario rollbak de SQLite [d]
Licencia 🅮 [d] [3]
Sitio web sqlite.org
 Archivos multimedia en Wikimedia Commons

SQLite ( / ˌ ɛ s ˌ k juː ˌ ɛ l ˈ aɪ t / , [4] [5] / ˈ s k w ə ˌ la t / [6] ) es un DBMS integrado compacto . El código fuente de la biblioteca ha sido liberado al dominio público . En 2005, el proyecto recibió los premios Google-O'Reilly Open Source Awards [7] .

Dispositivo

La palabra "incrustado" ( eng.  incrustado ) significa que SQLite no utiliza el paradigma cliente-servidor , es decir, el motor de SQLite no es un proceso de trabajo separado con el que interactúa el programa, sino una biblioteca con la que el programa está vinculado . , y el motor se convierte en una parte integral de los programas. Por lo tanto, las llamadas a funciones ( API ) de la biblioteca SQLite se utilizan como protocolo de intercambio. Este enfoque reduce los gastos generales, el tiempo de respuesta y simplifica el programa. SQLite almacena toda la base de datos (incluidas definiciones, tablas, índices y datos) en un solo archivo estándar en la máquina donde se ejecuta el programa. La facilidad de implementación se logra debido al hecho de que antes del inicio de la ejecución de la transacción de escritura, se bloquea todo el archivo que almacena la base de datos; Las funciones ACID se logran, entre otras cosas, mediante la creación de un archivo de registro.

Varios procesos o subprocesos pueden leer simultáneamente datos de la misma base de datos sin ningún problema. Solo se puede escribir en la base de datos si no se están atendiendo otras solicitudes actualmente; de lo contrario, el intento de escritura falla y se devuelve un código de error al programa. Otra opción para el desarrollo de eventos es la repetición automática de intentos de registro dentro de un intervalo de tiempo determinado.

El paquete también incluye una parte de cliente funcional en forma de un archivo sqlite3 ejecutable , que demuestra la implementación de las funciones de la biblioteca principal. La parte del cliente es una utilidad de línea de comandos multiplataforma .

SQLite se puede usar tanto en sistemas integrados como en máquinas dedicadas con arreglos de datos de gigabytes.

Tipos de datos

SQLite admite la tipificación dinámica de datos. Los posibles tipos de valores son INTEGER, REALy . El valor especial también es compatible . [ocho]TEXTBLOBNULL

Los tamaños de los valores TEXT y BLOB no están limitados por nada, excepto por una constante SQLITE_MAX_LENGTHen las fuentes de SQLite igual a mil millones (10 9 ) [9] .

Cada valor en cualquier campo de cualquier registro puede ser de cualquiera de estos tipos, independientemente del tipo especificado al declarar los campos de la tabla. El tipo especificado cuando se declara un campo se almacena como referencia en su ortografía original y se utiliza como base para elegir preferencias (la llamada "afinidad de tipo": este es un enfoque que rara vez se encuentra en otros DBMS) al realizar conversiones de tipo implícitas basado en la similitud de este nombre de tipo con cualquier cosa familiar con SQLite. Este algoritmo tiene una extensa lista de variantes de nombres de tipos de datos practicados en otros DBMS. Si un valor de escritura no se puede convertir de forma segura a su tipo preferido, SQLite escribe el valor en su forma original. Para obtener valores de la base de datos, hay una serie de funciones para cada uno de los tipos, y si el tipo del valor almacenado no coincide con el solicitado, también se convierte, si es posible. [diez]

Restricciones

Las versiones antiguas de SQLite se diseñaron sin ninguna restricción, la única condición era que la base de datos cupiera en la memoria, en la que todos los cálculos se realizaban con números enteros de 32 bits. Esto creó ciertos problemas. Debido a que los límites superiores no se han definido ni probado adecuadamente, a menudo se han encontrado errores al usar SQLite en condiciones bastante extremas. Por lo tanto, las versiones más nuevas de SQLite introdujeron límites que ahora se verifican junto con el conjunto de pruebas general.

Durante la compilación de la biblioteca SQLite, se establecen los siguientes límites, que se pueden aumentar si es necesario:

Descripción Sentido Constante en el código fuente
Longitud máxima de una cadena o campo BLOB 1,000,000,000 SQLITE_MAX_LENGTH
Número máximo de columnas 2000 SQLITE_MAX_COLUMN
Longitud máxima de una instrucción SQL 1,000,000,000 SQLITE_MAX_SQL_LENGTH
Número máximo de tablas en expresiones con JOIN 64
Profundidad máxima del árbol de expresión 1000 SQLITE_MAX_EXPR_DEPTH
Número máximo de argumentos de función 127 SQLITE_MAX_FUNCTION_ARG
Número máximo de términos en una expresión combinada con SELECT 500 SQLITE_MAX_COMPOUND_SELECT
La longitud máxima de un patrón como argumento para los operadores LIKE o GLOB 50,000 SQLITE_MAX_LIKE_PATTERN_LENGTH
Número máximo de caracteres de marcador de posición en una instrucción SQL 999 SQLITE_MAX_VARIABLE_NUMBER
Profundidad máxima de recursividad del disparador 1000 SQLITE_MAX_TRIGGER_DEPTH
Número máximo de bases adjuntas diez SQLITE_MAX_ATTACHED
Tamaño máximo de página de la base de datos 65 536 SQLITE_MAX_PAGE_SIZE
Número máximo de páginas en un archivo de base de datos 1 073 741 823 SQLITE_MAX_PAGE_COUNT

A partir de la versión 3.37.0, el valor de SQLITE_MAX_PAGE_SIZE no puede ser mayor que el valor predeterminado, que se indica explícitamente en el código fuente. El número máximo de páginas en la base de datos es 4294967294. Por lo tanto, el tamaño máximo de la base de datos es 1.4e+14 bytes (281 terabytes decimales o 256 TiB ). [once]

Algunos límites se pueden cambiar hacia abajo en el tiempo de ejecución especificando una categoría y el valor correspondiente de la función sqlite3_limit() :

int sqlite3_limit ( sqlite3 * , int id , int newVal )
Categoría Descripción
SQLITE_LIMIT_LENGTH La longitud máxima de cualquier cadena o campo BLOB o fila
SQLITE_LIMIT_SQL_LENGTH Longitud máxima de sentencia SQL
SQLITE_LIMIT_COLUMN Número máximo de columnas en una definición de tabla o resultado seleccionado o índice o expresiones con cláusulas ORDER BY o GROUP BY
SQLITE_LIMIT_EXPR_DEPTH La profundidad máxima del árbol analizado de cualquier expresión.
SQLITE_LIMIT_COMPOUND_SELECT Número máximo de términos en una expresión combinada con SELECT
SQLITE_LIMIT_VDBE_OP Número máximo de instrucciones de programa de máquina virtual de una instrucción SQL ejecutable
SQLITE_LIMIT_FUNCTION_ARG Número máximo de argumentos de función
SQLITE_LIMIT_ATTACHED Número máximo de bases adjuntas
SQLITE_LIMIT_LIKE_PATTERN_LENGTH La longitud máxima de un patrón como argumento para los operadores LIKE o GLOB
SQLITE_LIMIT_VARIABLE_NUMBER El número máximo de variables en una instrucción SQL que se puede vincular
SQLITE_LIMIT_TRIGGER_DEPTH Profundidad máxima de recursividad del disparador

Esto puede ser útil si SQLite se usa en aplicaciones web , ya que los límites reducidos pueden evitar ataques DoS de clientes externos que no son de confianza.

Uso

La biblioteca SQLite en sí está escrita en C ; hay muchos enlaces a otros lenguajes de programación, incluidos Apple Swift, Delphi , C++ , Java , C# , VB.NET , Python , Perl , Node.js , PHP , PureBasic [12] , Tcl (se incluyen herramientas para trabajar con Tcl con SQLite), Ruby , Haskell , Scheme , Smalltalk , Lua y Parser , y muchos más. Una lista completa de las herramientas existentes está disponible en la página del proyecto [13] .

La facilidad y conveniencia de incrustar SQLite ha llevado a que la biblioteca se use en navegadores , reproductores de música y muchos otros programas.

En particular, SQLite se usa en:

Muchos programas admiten SQLite como formato de almacenamiento de datos (especialmente en Mac OS e iOS , Android ), incluidos:

Véase también

Notas

  1. SQLite versión 3.39.4 el 2022-09-29 - 2022.
  2. El proyecto de código abierto de sqlite en Open Hub: página de idiomas - 2006.
  3. https://www.sqlite.org/copyright.html
  4. " Por qué SQLite tuvo éxito como base de datos: Richard Hipp, creador de SQLite ". El registro de cambios . Episodio 201. El evento ocurre a las 00:17:25. Digo SQL-ite, como un mineral".
  5. D. Richard Hipp (presentador). Una introducción a SQLite (video). Google Inc. Hora desde el inicio de la fuente: 00:01:14. "[...]ess-kju-élite [...]"
  6. D. Richard Hipp (presentador). Una introducción a SQLite . Google Inc.. Hora desde el inicio de la fuente: 00:48:15. "[...] secuela [...]"
  7. Premios de código abierto Google-O'Reilly - Salón de la fama - Código de Google . Consultado el 5 de marzo de 2010. Archivado desde el original el 11 de julio de 2011.
  8. Copia archivada (enlace no disponible) . Consultado el 11 de marzo de 2019. Archivado desde el original el 13 de febrero de 2019.    (Inglés)
  9. Límites de implementación para SQLite . Consultado el 23 de noviembre de 2018. Archivado desde el original el 8 de enero de 2019.
  10. Copia archivada (enlace no disponible) . Consultado el 11 de marzo de 2019. Archivado desde el original el 10 de marzo de 2019.    (Inglés)
  11. Límites de implementación para SQLite . Consultado el 8 de diciembre de 2021. Archivado desde el original el 7 de noviembre de 2021.
  12. Función UseSQLiteDatabase() . Consultado el 28 de septiembre de 2013. Archivado desde el original el 2 de octubre de 2013.
  13. Lista de enlaces de SQLite para otros idiomas (enlace descendente) . Consultado el 4 de abril de 2007. Archivado desde el original el 5 de febrero de 2009. 
  14. sqlite-manager - Alojamiento de proyectos en Google Code . Consultado el 5 de marzo de 2010. Archivado desde el original el 9 de febrero de 2010.
  15. ¿Cliente de Skype usando SQLite? (enlace no disponible) . Consultado el 7 de mayo de 2010. Archivado desde el original el 28 de septiembre de 2014. 
  16. sqlite1c - Alojamiento de proyectos en Google Code . Consultado el 5 de agosto de 2008. Archivado desde el original el 12 de abril de 2009.
  17. Cómo mejoramos el registro de registro . 1C (29 de octubre de 2013). Consultado el 1 de julio de 2014. Archivado desde el original el 27 de agosto de 2014.
  18. Controlador de base de datos dbRW 1.2 Archivado el 1 de mayo de 2011.

Enlaces