¿Qué hace SQLite PRAGMA? ¿Qué hace?
Pragma acepta valores enteros o símbolos de nombre. Las cadenas "on", "true" y "yes" equivalen a 1. Las cadenas "off", "false" y "no" equivalen a 0. Estas cadenas no distinguen entre mayúsculas y minúsculas y no requieren comillas dobles. Las cadenas no reconocidas se tratarán como 1 y no se generará ningún error. Cuando se devuelve el valor, se trata como un número entero.
Aspirador automático PRAGMA;
PRAGMA auto_vacuum = 0 | Ninguno | Completo 2 |
Normalmente (es decir, cuando auto_vacuum es 0 o ninguno), cuando se envía una transacción que elimina datos de la base de datos, el tamaño del archivo de la base de datos no cambiará y se registrará el espacio de la página del archivo de la base de datos no utilizado. en una "lista libre" para que estos espacios puedan ser reutilizados en futuras inserciones. Por lo tanto, el archivo de base de datos no se reduce. En este modo, puede recuperar espacio no utilizado utilizando el comando VACUUM.
Si el indicador de vacío automático es 1 (completo, modo completo), las páginas de la lista libre se moverán al final del archivo, de modo que cada vez que se confirma una transacción, la lista libre puede convertirse truncando las páginas del archivo en formato . Sin embargo, tenga en cuenta que auto-VACUUM solo cargará páginas en la lista libre desde el archivo de la base de datos y no recuperará fragmentos en la base de datos, ni actualizará el contenido de la base de datos como lo hace el comando VACUUM. De hecho, el vacío automático genera más fragmentación debido a la necesidad de mover páginas dentro del archivo de base de datos.
Para utilizar la aspiradora automática, necesitas algunos requisitos previos. La base de datos necesita almacenar información adicional para registrar cada página de la base de datos que rastrea y recuperar la posición del puntero. Por lo tanto, se debe activar la aspiración automática antes de construir la mesa. Después de crear una mesa, la aspiración automática no se puede activar ni desactivar.
Si el valor de autovacuum es 2 (modo incremental), autovacuum necesita utilizar información adicional almacenada en el archivo de base de datos. Pero no todas las transacciones confirmadas como auto_vacuum == full se realizarán. En modo incremental, se debe utilizar una directiva de compilador incremental_vacuum separada para aumentar el vacío.
Las conexiones de bases de datos se pueden cambiar libremente entre modo completo y modo incremental. Sin embargo, si se ha creado una tabla en la base de datos, la conexión no se puede cambiar al modo ninguno, ni se puede cambiar del modo ninguno a otros modos.
PRAGMA cache_size;
Tamaño de caché PRAGMA = número de páginas;
La consulta puede modificar el número máximo de páginas del disco de la base de datos que SQLite puede mantener en la memoria. una vez. Cada página requiere aproximadamente 1,5 KB de espacio de memoria. El valor predeterminado es 2000. Si necesita realizar una gran operación de actualización o eliminación que afecte a una cantidad considerable de filas de la base de datos a la vez, y no le importa que SQLite ocupe más memoria, entonces puede aumentar el tamaño de la caché y obtener un posible aumento de velocidad.
Cuando usas cache_sizeplaggma para modificar el tamaño de la caché, los cambios solo tendrán efecto en la sesión actual. Después de cerrar y volver a conectar la conexión de la base de datos, volverá a tener el tamaño predeterminado. Si desea modificar permanentemente el valor de la caché, debe utilizar default_cache_size.
PRAGMA distingue entre mayúsculas y minúsculas;
PRAGMA case_SENSITIVE_like = 0 | 1;
El comportamiento predeterminado del operador LIKE ignora el tamaño de la escritura de caracteres latinos. En otras palabras, 'A' como 'A' se evalúa como verdadero de forma predeterminada. Puede cambiar este comportamiento activando pragma. Cuando se habilita case_SENSITIVE_like, "A" COMO "A" será falso, pero "A" COMO "A" seguirá siendo verdadero.
PRAGMA count_changes;
PRAGMA count_changes = 0 | 1;
Consulta o modifica el indicador de cambio de recuento. Normalmente, si no se establece el recuento de cambios, las declaraciones INSERT, UPDATE y DELETE no devolverán ningún dato. Cuando se establece este valor, estos comandos devuelven una fila de datos que consta de un número entero que indica el número de filas insertadas, modificadas o eliminadas por el comando, excluyendo cualquier fila insertada, modificada o eliminada por el disparador.
Tamaño de caché predeterminado de PRAGMA;
Tamaño de caché predeterminado de PRAGMA = número de páginas;
Consulta o configura las páginas del archivo del disco de la base de datos que SQLite puede mantener en la memoria. Al mismo tiempo, cada página ocupa 1K de espacio en disco y requiere aproximadamente 1,5K de memoria. Este pragma es similar a cache_size. Sin embargo, cambiará permanentemente el valor almacenado en caché. Con este pragma puedes establecer el valor de la caché una vez y usarlo cada vez que abras la base de datos en el futuro.
PRAGMA default_sync;
Este pragma estaba disponible en la versión 2.8 pero se eliminó en la versión 3.0. Es muy peligroso de usar y no se recomienda. Para ayudar a los usuarios de la versión 2.8 a dejar de usar este pragma, este documento no indica cómo usarlo.
PRAGMA vacío_result_callbacks;
PRAGMA vacío_result_callbacks = 0 | 1;
Consulta o establece el indicador de devolución de llamada de resultado vacío.
Esta bandera solo afecta a la API sqlite3_exec. Normalmente, cuando se borra este indicador, la función de devolución de llamada utilizada en sqlite3_exec() no se activará si el comando devuelve 0 filas de datos. Sin embargo, si se establece vacío_result_callbacks en este caso, la función de devolución de llamada tendrá el tercer parámetro establecido en 0 (NULL) y se llamará solo una vez. Esto se puede hacer usando un programa que llama a la API sqlite3_exec() para obtener los nombres de las columnas incluso si no se devuelven datos.
Codificación PRAGMA;
Codificación PRAGMA = "UTF-8";
Codificación PRAGMA = "UTF-16";
PRAGMA encoding="UTF-16le";
PRAGMA encoding="UTF-16be";
En el primer formato, se ha creado la base de datos maestra. Luego, pragma devolverá la codificación del archivo utilizada por la base de datos principal. Puede ser "UTF-8", "UTF-16le" (codificación UTF-16 india pequeña) o puede ser "UTF-16be" (codificación UTF-16 india grande). Si no se ha creado la base de datos maestra, el valor de retorno será la codificación de texto utilizada para crear la base de datos maestra (si se creó en la sesión actual).
El segundo formato y siguientes sólo son útiles cuando la base de datos maestra no ha sido creada. En este caso, pragma establecerá la codificación de la base de datos en la codificación utilizada por la base de datos que se creará en la sesión actual. La cadena "UTF-16" se interpretará como "codificación UTF-16 en orden de bytes nativo".
Si se utilizan el segundo formato y superiores en el archivo de base de datos creado, se ignoran automáticamente y no tienen ningún efecto.
Una vez configurada la codificación de caracteres para la base de datos, no se puede cambiar.
Los registros de la base de datos creados con el comando ATTACH utilizan la misma codificación que los datos maestros.
PRAGMA full name_column name;
PRAGMA full_column_names = 0 | 1;
Consulta o modifica el indicador de nombre de columna completo. Este indicador afecta la forma en que SQLite devuelve los nombres de las columnas cuando la lista después de la consulta SELECT es "nombre de columna de tabla" o "*". Normalmente, si una instrucción SELECT une dos o más tablas, el nombre de la columna resultante será;
Si tanto el nombre de columna corto como la columna completa; Se establece el nombre, prevalecerá el nombre completo del listado.
Sincronización completa de PRAGMA
PRAGMA fullfsync = 0 | 1;
Consulta y modifica el indicador fullfsync. Este indicador afecta si el método de sincronización F_FULLFSYNC se utiliza en sistemas que lo admiten. El valor predeterminado está desactivado (no se utiliza). En el momento de escribir este artículo (10 de febrero de 2006), sólo Mac OS X admite F_FULLFSYNC.
PRAGMA INCREMENTAL_vacuum(N);
La pragma Incremental_vacuum hará que se eliminen hasta n páginas de la lista libre. El archivo de base de datos también se truncará en esta cantidad. Si la base de datos no está en modo auto_vacuum==incremental, o si no hay páginas en la lista libre, pragma no tendrá ningún efecto. Si hay menos de n páginas en la lista libre, se borrará toda la lista libre.
Para la versión 3.4.0 (la primera versión que admite incremental_vacuum), todavía estoy en fase experimental. Esta característica puede mejorarse en el futuro para incluir desfragmentación como comandos de vacío y reorganización de nodos. Además, el vacío incremental se puede cambiar de un pragma a un único comando SQL, posiblemente una variante del comando vacío. Los programadores deben tener cuidado de no atascarse con la sintaxis actual, ya que puede cambiar en el futuro.
Formato de archivo tradicional PRAGMA;
Formato de archivo tradicional PRAGMA=on|off
Este pragma establece o consulta el valor del indicador Legacy_file_format. Cuando está habilitado, las versiones posteriores a la 3.0.0 pueden leer y escribir formatos de archivos de bases de datos recién creados. Si está desactivado, se utilizará el formato de archivo de base de datos más reciente y las versiones anteriores de SQLite no podrán leer ni escribir.
Cuando se usa pragma sin parámetros, devuelve el valor actual de la bandera. No le dirá qué formato de archivo utiliza su base de datos actual, sólo qué formato utilizará al crear nuevas bases de datos en el futuro.
Esta bandera sólo es válida para bases de datos recién creadas. No funciona con bases de datos existentes.
PRAGMA lock_mode;
PRAGMA lock mode=normal|private
Este pragma establece o consulta el modo de bloqueo de la conexión de la base de datos. El modo de bloqueo puede ser el modo normal o el modo exclusivo.
En modo normal (predeterminado), la conexión de la base de datos liberará el bloqueo del archivo de la base de datos cada vez que se complete una lectura o escritura. Cuando el modo de bloqueo se establece en EXCLUSIVO, la conexión de la base de datos nunca liberará el bloqueo del archivo. En este modo, cuando el archivo de base de datos se lee por primera vez, se adquiere y se mantiene un bloqueo exclusivo. La primera vez que escribe en la base de datos, se obtiene y mantiene un bloqueo exclusivo.
Un bloqueo adquirido en modo exclusivo se puede liberar cerrando la conexión de la base de datos o usando este pragma para cambiar el modo de bloqueo al modo normal y acceder (leer o escribir) a la base de datos nuevamente. Configurar el modo de bloqueo en normal no es suficiente; el bloqueo retenido no se liberará hasta la próxima vez que se acceda al archivo de la base de datos.
Hay dos razones para configurar el modo de bloqueo exclusivo. Una es que la aplicación no quiere que otros procesos accedan a los archivos de la base de datos. En segundo lugar, el optimizador se puede utilizar en este modo, lo que puede guardar una pequeña cantidad de operaciones de archivos de disco. Esto puede ser muy importante en sistemas integrados.
Cuando la pragma lock_mode especifica una base de datos específica, por ejemplo:
PRAGMA Street. lock_mode = EXCLUSIVE
Entonces el modo de bloqueo solo es válido para esa base de datos. Si no especifica un nombre de base de datos, el modo de bloqueo se aplicará a todas las bases de datos, incluidas las bases de datos futuras conectadas mediante el comando ATTACH.
Las bases de datos temporales (utilizadas para el almacenamiento temporal de tablas e índices temporales) siempre utilizan el modo de bloqueo exclusivo. El modo de bloqueo de una base de datos temporal no se puede cambiar. Todas las demás bases de datos usan el modo de bloqueo normal de forma predeterminada y se pueden cambiar usando pragma.
PRAGMA page_size;
PRAGMA page_size = bytes;
Consulta o establece el tamaño de página de la base de datos. El tamaño de la página solo se puede configurar entre creaciones de bases de datos. El tamaño de la página debe ser una potencia de 2 y el exponente de potencia solo puede estar entre 512 y 8192. Su límite superior se puede modificar modificando SQLITE_MAX_PAGE_SIZE en el código fuente en el momento de la compilación, pero el límite máximo no puede exceder 32768.
Recuento máximo de páginas de PRAGMA;
Recuento máximo de páginas de PRAGMA = N;
Consulta o establece el número máximo de páginas en el archivo de base de datos. Ambos formatos devolverán el número máximo de páginas. El segundo formato intenta modificar el número máximo de páginas. El número máximo de páginas no se puede modificar para que sea menor que el tamaño actual de la base de datos.
PRAGMA read _ uncommitted;
PRAGMA read _ uncommitted = 0 |
Consulta, establece o borra el nivel de aislamiento de lectura no confirmada. El nivel de aislamiento predeterminado de SQLite es SERIALIZABLE. Cualquier proceso o hilo puede seleccionar el nivel LEER NO COMPROMETIDO. Sin embargo, se seguirá utilizando el nivel de aislamiento serializable, excepto * * * donde el caché se comparte entre páginas y esquemas a través de conexiones de bases de datos. * * * El caché compartido se puede activar usando la API SQLite3_enable_shared_cache() y solo se puede activar entre conexiones que ejecutan el mismo hilo. * * *Disfrutar del almacenamiento en caché está desactivado de forma predeterminada.
PRAGMA short_column_names;
PRAGMA short_column_names = 0 | 1;
Consulta o modifica el indicador de nombre de columna corta. Este indicador afecta la forma en que SQLite devuelve los nombres de las columnas cuando la lista después de la consulta SELECT es "nombre de columna de tabla" o "*". Normalmente, si una instrucción SELECT une dos o más tablas, el nombre de la columna resultante será;
Si tanto el nombre de columna corto como la columna completa; se establece el nombre, prevalecerá la marca de listado completo.
Sincronización PRAGMA;
Sincronización PRAGMA=completa;(2)
Sincronización PRAGMA=normal;(1)
Sincronización PRAGMA= Desactivado; (0)
Consulta o establece el indicador de sincronización. El primer formato devuelve un número entero. Cuando se completa la sincronización (2), el motor de base de datos SQLite se detendrá en momentos importantes para garantizar que los datos realmente se hayan escrito en el disco antes de continuar. Esto garantiza que el archivo de base de datos de la máquina reiniciada no se destruirá cuando el sistema operativo falle y se corte la energía. La sincronización completa es muy segura, pero también muy lenta. Si sincrónico está configurado en NORMAL, el motor de base de datos SQLite se detendrá en los momentos más importantes, pero no en modo completo.
En casos excepcionales, los archivos de bases de datos que manejan este modo pueden dañarse debido a un corte de energía "inoportuno". Pero en aplicaciones reales, es más probable que se produzcan fallos catastróficos en el disco u otros fallos de hardware irrecuperables. Si sincrónico está configurado en APAGADO (0), SQLite procesará los datos inmediatamente después de obtenerlos del sistema operativo sin pausa. Si una aplicación que utiliza SQLite falla, los datos estarán seguros. Sin embargo, el archivo de la base de datos puede dañarse si el sistema operativo falla o la máquina pierde energía antes de que los datos se escriban en el disco. Además, algunas operaciones son hasta 50 veces más rápidas que otras en este modo.
En SQLite versión 2, el valor predeterminado es NORMAL. Para la versión 3, el valor predeterminado es COMPLETO.
Tienda temporal PRAGMA;
Tienda temporal PRAGMA=Predeterminado;(0)
Tienda temporal PRAGMA=Archivo;(1)
PRAGMA temp_store =memoria; (2)